Geometry 在线段中投影点:如果线段的端点具有相同的坐标,该怎么办?

Geometry 在线段中投影点:如果线段的端点具有相同的坐标,该怎么办?,geometry,coordinates,point,projection,Geometry,Coordinates,Point,Projection,考虑以下等式和指令: 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_poin

考虑以下等式和指令:

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"
        );
        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"

        );
现在,p的Y坐标也是一样的:

            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"
        );
        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而不是数字:它将是无效的


所以我想我不明白如何表达一个观点。。。你能告诉我吗?

你好:问题在于你对p的计算,它不应该是,或者正如你所描述的,它应该是,因为p公式中系数的分母是b-a.b-a。当且仅当a和b是同一点时,该值应为0,即实际上没有线段