我正在编写一个定义3D几何图形的小库,以及每个几何图形的许多有用函数。我将Point3D定义为具有3个双精度坐标,每个轴一个,并且Line3D具有2个Point3D。在Line3D类中,我想要一个方法,它将返回最接近作为参数传递的Point的一个点。
有谁知道怎么做?
(按方式我不是在寻找距离,而是在线上的实际点
答案 0 :(得分:1)
让该行为P0P1
和额外点Q
。
该线的参数方程是
P = P0 + t (P1 - P0)
平方距离PQ²
是
(P0 - Q + t (P1 - P0))² = t² (P1 - P0)² + 2 (P1 - P0)(P0 - Q) t + (P0 - Q)²
您可以通过取消t
的第一个导数来找到最小值:
2 t (P1 - P0)² + 2 (P1 - P0)(P0 - Q) = 0
这会为您提供t
,然后P
。
答案 1 :(得分:0)
从该点找到垂直于第一行的直线。然后你有两个未知数的方程,你可以求解。解决方案是交叉点。实现这一点。有关详细信息,请参阅this。
答案 2 :(得分:0)
让我们的线由两个点P0和P1定义,并且某些点P. 查找归一化方向向量
d =( P1 - P0 )/长度( P1 - P0 )
和矢量
W = P - P0
该行的最近点P(b)是
Pb = d * ScalarProduct( W , d )
并非此方法适用于2D情况和3D情况。