在wpf中做一些3D的东西-想使用一个简单的测试来查看是否一切正常(在转向曲线之前)。
基本问题是,给定两个点x1,y1,z1和x2,y2,z2,我已经计算出这些点之间的距离。但如何找到另一个点(x3,y3,z3)的坐标,该点位于该直线上的某个距离处?
即,如果我的线在-50,0,0和50,0,0之间长达100,那么在线的100 * 0.1处的点的坐标是什么?
我认为这是一个简单的公式,但我还没有找到它....
在wpf中做一些3D的东西-想使用一个简单的测试来查看是否一切正常(在转向曲线之前)。
基本问题是,给定两个点x1,y1,z1和x2,y2,z2,我已经计算出这些点之间的距离。但如何找到另一个点(x3,y3,z3)的坐标,该点位于该直线上的某个距离处?
即,如果我的线在-50,0,0和50,0,0之间长达100,那么在线的100 * 0.1处的点的坐标是什么?
我认为这是一个简单的公式,但我还没有找到它....
对于介于0和1之间的每个p,这将为您提供线段上的一个点:
(x1, y1, z1) + p * ((x2, y2, z2) - (x1, y1, z1))
这与数学有关,但没问题。假设给定两个点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.S:顺便说一句:P-Q = (Px - Qx, Py - Qy, Pz - Qz)
...我敢打赌你已经知道了它 :)
让t
从0到1变化。使用以下公式:
(x3, y3, z3) = (1-t)*(x1, y1, z1) + t*(x2, y2, z2)
当t=0时,得到第一个点。当t=1时,得到第二个点。
这种方法被称为线性插值。
一个连接3D点的线由以下公式给出:
(x - x1)/(x2 - x1) = (y - y1)/(y2 - y1) = (z - z1)/(z2 - z1)
您已经获取了x1、y1、z1、x2、y2、z2的值,这将为您提供该线的方程。
另一个方程是:
((x-x1)^2+(y-y1)^2+(z-z1)^2)^(1/2)=distance
解决这2个方程以获取点值。