在 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 表示一个因子。
if 0 < r < 1
:点 x 将在两点之间的线上。
就是这样!
编辑:
要在距 P(p1/p2/p3) 的给定距离 d 处找到一个点:
d² / euclidian_square_distance(P,Q) = r
在上面提到的等式中插入 r,你就会明白你的意思!:)
PS:顺便说一句: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)=距离
求解 2 个方程以获得点的值。