Abstand von einem Punkt zu einer Geraden
-
Wenn man so unglaublich schlau wie ich bin, kann man doch auch so richtig überheblich sein. Dann wirft man den Leute einfach so'n google Link hin http://www.google.de/search?hl=de&ie=UTF-8&oe=UTF-8&q=distance+point+line+2d&meta= und hofft das sie es mit der Maus bis zum ersten Link schaffen. Kritik von prallt quasi ungelesen ab und Smilies spart man im entscheidenten Moment ein.
-
Wenn man im "entscheidenden Moment" nichts konstruktives beitragen kann/will, dann kann man auch einfach nichts sagen. Scroll nochmal ganz nach oben (evtl. musst du auch auf die erste Seite des Flame Wars wechseln) und schau dir deinen ersten und zweiten Beitrag an.
Vielleicht wirst du mit Hilfe deiner Genialität feststellen, dass diese nicht zur Lösung des Problems beigetragen haben. Aber du musst halt einfach immer deinen Senf dazu geben.
-
Durch eine der vielen meiner heldenhaftene Person innewohnenden gottgleichen Fähigkeiten ist mir der Hinweis auf google natürlich bereits ohne Benutzung des Mausrades bewusst. Und hey, ohne Senf schmeckt's ja nicht.
-
Gerade hat Richtungsvektor v und Punktvektor u.
Punkt hat Punktvektor p.
Dann ist der Abstand |w|:|w| = | u + [((p-u)*v)/(v*v)]*v-p |
Das ganze resultiert aus der Orthogonalitätsbedingung v1 ort. zu w1 ->v1*w1=0
Das Produkt zweier Vektoren ist in diesem Fall jeweils das Skalarprodukt, also eine Zahl (kein Vektor). Also bitte nicht mit Kreuzprodukt verwechseln !Gruß
E-the-Real
-
Wiederum zu umständlich! Schau mal die Seite aus google an, dort wird für 2D auch davon abgeraten.
-
Hi,
Hm, ich weiß ja nicht ob ihr schon lösungen habt oder so.
Aber ich poste einfach mal meinen Weg.Punkt: x
Gerade: p1.) Hilfeben Normalenvector des Richtungsvectors der Geraden.
2.) d(abstand zu 0 ) mit hilfe des Punktes x bestimmen.
3.) Gerade p mit Hilfsebene schneiden.
4.) Den Abstand zwischen punkt x und Schnittpunkt von hilfsebene und gerade p.So das wars
Cu
-
Oh mann...
-
// dist_Point_to_Line(): get the distance of a point to a line. // Input: a Point P and a Line L (in any dimension) // Return: the shortest distance from P to L float dist_Point_to_Line(Point P, Line L) { Vector v = L.P1 - L.P0; Vector w = P - L.P0; double c1 = dot(w,v); double c2 = dot(v,v); double b = c1 / c2; Point Pb = L.P0 + b * v; return d(P, Pb); }
-
Es kommt noch besser: Eigentlich brauch ich ja den Abstand von nem Punkt zu einer Strecke. Ich hab mir halt gedacht, des krieg ich dann auch noch hin, ich frag mal nach Gerade. Im Moment hab ich folgendes:
#define dot(u,v) ((u).x * (v).x + (u).y * (v).y) #define norm(v) sqrt(dot(v,v)) // norm = length of vector #define dis(u,v) norm(u-v) // distance = norm of difference [PointFloat::]inline double GetDistanceToSegment(const PointFloat &rStartPoint, const PointFloat &rEndPoint) { PointFloat v = rEndPoint - rStartPoint; PointFloat w = *this - rStartPoint; double c1 = dot(w,v); if (c1 <= 0) return dis(*this, rStartPoint); double c2 = dot(v,v); if (c2 <= c1) return dis(*this, rEndPoint); double b = c1 / c2; PointFloat Pb; Pb.x = rStartPoint.x + b * v.x; Pb.y = rStartPoint.y + b * v.y; return dis(*this, Pb); }
Ich müsste es eigentlich nur noch testen, aber ich bin grad zu sehr mit DirectX Graphics beschäftigt, deshalb hab ich noch nichts gesagt
Man sollte nicht immer alles gleichzeitig machen
-
Ich glaub ihr habt den (C) Hinweis vergessen.