在wpf中做一些3D的东西--想要使用一个更简单的测试来看看是否一切正常(在移动到曲线之前)。
基本问题是给定两个点,x1,y1,z1和x2,y2,z2,我计算了这两个点之间的距离。但是如何找到位于某一距离上的另一个点(x3,y3,z3)的坐标呢?
也就是说,如果我的直线长100,介于-50,0,0和50,0,0之间,那么这条直线上100 * 0.1处的点的坐标是多少?
我认为这是一个简单的公式,但我还没有找到它……
发布于 2010-05-21 22:57:13
对于0到1之间的每个p,这将在线段上给出一个点:
(x1, y1, z1) + p * ((x2, y2, z2) - (x1, y1, z1))
发布于 2010-05-21 22:55:46
这与数学有关,但好吧。假设P
和Q
是给定的两个点,X
是您要查找的点。
P + r(Q - P) = X
R表示一个因子。
如果为0 < r < 1
:点x将位于两点之间的直线上。
就这样!
编辑:
要在距离P(p1/p2/p3)的给定距离d处查找点,请执行以下操作:
d² / euclidian_square_distance(P,Q) = r
在上面提到的方程式中插入r,你就得到了你想要的!:)
附言:顺便说一句:P-Q = (Px - Qx, Py - Qy, Pz - Qz)
...我打赌你已经知道了:)
发布于 2010-05-21 22:59:51
让t
在0到1之间变化。使用以下方法:
(x3, y3, z3) = (1-t)*(x1, y1, z1) + t*(x2, y2, z2)
当使用t=0时,你得到了第一个点。当使用t=1时,你会得到第二个。
这种方法称为linear interpolation。
https://stackoverflow.com/questions/2886092
复制