在段中投影一个点:如果段的四肢具有相同的坐标怎么办?

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

其中 ab 是线段的末端,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 是同一点时,即)你实际上没有线段。