在段中投影一个点:如果段的四肢具有相同的坐标怎么办?
Projecting a point in a segment : what if segment's extremities have a same coordinate?
考虑以下等式和指令:
p = ((x - a).(b - a))/((b - a).(b - a)) (b - a) + a
其中 a
和 b
是线段的末端,x
我们要在该线段投影的点和 p
x
的投影在这一部分。都是向量点。
现在设置p
的X坐标的代码:
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"
);
现在,p
的Y坐标也一样:
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"
);
如您所见,如果 segment_last_point_y == segment_first_point_y
或 | segment_last_point_x == segment_first_point_x
,除法的分母将为 0
。
因此,p
的一个(或两个)坐标将是 NaN
("Not A Number"):它将无效。
所以我想我不明白如何投射一个点...你能赐教吗?
您好:)问题出在您对 p 的计算上,它不应该像您描述的那样是 OR,而应该是 AND 因为p公式中系数的分母为(b - a).(b - a)。这应该是 0 当且仅当 a 和 b 是同一点时,即)你实际上没有线段。
考虑以下等式和指令:
p = ((x - a).(b - a))/((b - a).(b - a)) (b - a) + a
其中 a
和 b
是线段的末端,x
我们要在该线段投影的点和 p
x
的投影在这一部分。都是向量点。
现在设置p
的X坐标的代码:
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"
);
现在,p
的Y坐标也一样:
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"
);
如您所见,如果 segment_last_point_y == segment_first_point_y
或 | segment_last_point_x == segment_first_point_x
,除法的分母将为 0
。
因此,p
的一个(或两个)坐标将是 NaN
("Not A Number"):它将无效。
所以我想我不明白如何投射一个点...你能赐教吗?
您好:)问题出在您对 p 的计算上,它不应该像您描述的那样是 OR,而应该是 AND 因为p公式中系数的分母为(b - a).(b - a)。这应该是 0 当且仅当 a 和 b 是同一点时,即)你实际上没有线段。