Betrachten Sie die folgende Gleichheit und Anleitung:Projizieren eines Punkts in einem Segment: Was passiert, wenn die Extremitäten eines Segments dieselbe Koordinate haben?
p = ((x - a).(b - a))/((b - a).(b - a)) (b - a) + a
Wo a
und b
die Extremitäten des Segments sind, x
der Punkt, den wir in diesem Segment und p
die Projektion von x
in diesem Segment projizieren wollen. Alle sind Vektorpunkte.
Jetzt ist der Code, der p
's X-Koordinate:
coords_p.add(
""
+ (
((test_x - segment_first_point_x) * (segment_last_point_x - segment_first_point_x)) // "((x - a).(b - a))"
/
(// "((b - a).(b - a))"
(segment_last_point_x - segment_first_point_x) * (segment_last_point_x - segment_first_point_x)
)
*
(segment_last_point_x - segment_first_point_x) // "* (b - a)"
+
segment_first_point_x) // " + a"
);
nun das gleiche für p
' gesetzt s Y-Koordinate:
coords_p.add(
""
+ (
((test_y - segment_first_point_y) * (segment_last_point_y - segment_first_point_y)) // "((x - a).(b - a))"
/
(0.00001+ // "((b - a).(b - a))"
(segment_last_point_y - segment_first_point_y) * (segment_last_point_y - segment_first_point_y)
)
*
(segment_last_point_y - segment_first_point_y) // "* (b - a)"
+
segment_first_point_y) // " + a"
);
Wie Sie sehen können, wenn segment_last_point_y == segment_first_point_y
OR | segment_last_point_x == segment_first_point_x
, der Nenner der Division wird 0
sein.
Einer der Koordinaten p
(oder beide) ist also ein NaN
("Not A Number"): es wird ungültig sein.
Also ich denke, ich habe nicht verstanden, wie man einen Punkt projiziert ... Könnten Sie mich bitte aufklären?