找到线段上最近的点
Find the nearest point on a segment
我尝试在 Javascript 中找到一种从 3 个信息中获取线段上最近点坐标的方法:线段端点,假设 A = [x1,y1] 和 B = [x2,y2 ], 和一个点 C = [x,y].
如何执行?
您将需要 https://en.wikipedia.org/wiki/Analytic_geometry
的知识
它可以让你得到几个方程式,你需要求解这些方程式才能得到那个点。是高等高中数学。
在你的情况下,你需要从两点创建直线方程https://mathinsight.org/lines_algebraic_geometry_refresher
然后你需要计算与上一行成直角的向量https://www.mathsisfun.com/algebra/vectors-dot-product.html
(然后找到通过点 C
并具有矢量方向的线的方程)
然后你需要找到这两条线的交点
https://brilliant.org/wiki/linear-equations-intersection-of-lines/
制作载体
AB = (B.X-A.X, B.Y-A.Y)
AC = (C.X-A.X, C.Y-A.Y)
然后计算C
到AB
线的正交投影:
AD = AB * (AB.dot.AC) / (AB.dot.AB);
在坐标中:
CF = ((B.X-A.X)*(C.X-A.X)+(B.Y-A.Y)*(C.Y-A.Y)) / ((B.X-A.X)^2+(B.Y-A.Y)^2)
D.X=A.X+(B.X-A.X)*CF
D.Y=A.Y+(B.Y-A.Y)*CF
请注意,对于 CF<0
或 CF>1
的情况,投影点 D
位于 AB
线段之外,因此最近的点线段是 A
或 B
对应
我尝试在 Javascript 中找到一种从 3 个信息中获取线段上最近点坐标的方法:线段端点,假设 A = [x1,y1] 和 B = [x2,y2 ], 和一个点 C = [x,y].
如何执行?
您将需要 https://en.wikipedia.org/wiki/Analytic_geometry
的知识它可以让你得到几个方程式,你需要求解这些方程式才能得到那个点。是高等高中数学。
在你的情况下,你需要从两点创建直线方程https://mathinsight.org/lines_algebraic_geometry_refresher
然后你需要计算与上一行成直角的向量https://www.mathsisfun.com/algebra/vectors-dot-product.html
(然后找到通过点 C
并具有矢量方向的线的方程)
然后你需要找到这两条线的交点 https://brilliant.org/wiki/linear-equations-intersection-of-lines/
制作载体
AB = (B.X-A.X, B.Y-A.Y)
AC = (C.X-A.X, C.Y-A.Y)
然后计算C
到AB
线的正交投影:
AD = AB * (AB.dot.AC) / (AB.dot.AB);
在坐标中:
CF = ((B.X-A.X)*(C.X-A.X)+(B.Y-A.Y)*(C.Y-A.Y)) / ((B.X-A.X)^2+(B.Y-A.Y)^2)
D.X=A.X+(B.X-A.X)*CF
D.Y=A.Y+(B.Y-A.Y)*CF
请注意,对于 CF<0
或 CF>1
的情况,投影点 D
位于 AB
线段之外,因此最近的点线段是 A
或 B
对应