lima-city: Webhosting, Domains und Cloud
2 Pluspunkte 0 Minuspunkte

Wenn ich eine diagonale Linie in .NET zeichne wie kann ich prüfen ob mit der Maus darauf geklickt wird? Ich schaffe es nur das ganze umfassende Rechteck zu prüfen aber nicht genau die Linie.

von  

1 Antwort

1 Pluspunkt 0 Minuspunkte

Hier ist eine Funktion zum Berechnen ob ein Punkt auf einer Linie zwischen 2 Punkten liegt.

float DistancePointToLine(Point point, Point lineStart, Point lineEnd)
{
    float a = point.X - lineStart.X;
    float b = point.Y - lineStart.Y;
    float c = lineEnd.X - lineStart.X;
    float d = lineEnd.Y - lineStart.Y;

    float dot = a * c + b * d;
    float len_sq = c * c + d * d;
    float param = dot / len_sq;

    float xx, yy;

    if (param < 0)
    {
        xx = lineStart.X;
        yy = lineStart.Y;
    }
    else if (param > 1)
    {
        xx = lineEnd.X;
        yy = lineEnd.Y;
    }
    else
    {
        xx = lineStart.X + param * c;
        yy = lineStart.Y + param * d;
    }

    float dx = point.X - xx;
    float dy = point.Y - yy;
    return (float)Math.Sqrt(dx * dx + dy * dy);
}

bool hit;
float distance = DistancePointToLine(clickPoint, lineStartPoint, lineEndPoint);
hit = distance < 5; // Schwellenwert nach Bedarf ändern
von (720 Punkte)  
Diese Community basiert auf dem Prinzip der Selbstregulierung. Beiträge werden von Nutzern erstellt, bewertet und verbessert – ganz ohne zentrale Moderation.

Wer hilfreiche Fragen stellt oder gute Antworten gibt, sammelt Punkte. Mit steigender Punktzahl erhalten Mitglieder automatisch mehr Rechte, zum Beispiel

  • Kommentare verfassen
  • Fragen und Antworten bewerten
  • Themen von Fragen bearbeiten
  • Fragen, Antworten und Kommentare bearbeiten
  • Inhalte ausblenden

So entsteht eine Plattform, auf der sich Qualität durchsetzt – getragen von einer engagierten Gemeinschaft.

2.3k Fragen

2.8k Antworten

265 Kommentare

14 Nutzer