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 (716 Punkte)