在两点之间找到一个点的坐标?

9

在wpf中做一些3D的东西-想使用一个简单的测试来查看是否一切正常(在转向曲线之前)。

基本问题是,给定两个点x1,y1,z1和x2,y2,z2,我已经计算出这些点之间的距离。但如何找到另一个点(x3,y3,z3)的坐标,该点位于该直线上的某个距离处?

即,如果我的线在-50,0,0和50,0,0之间长达100,那么在线的100 * 0.1处的点的坐标是什么?

我认为这是一个简单的公式,但我还没有找到它....

4个回答

15

对于介于0和1之间的每个p,这将为您提供线段上的一个点:

(x1, y1, z1) + p * ((x2, y2, z2) - (x1, y1, z1))

在这个例子中,提问者给出了p=0.1,这很好地解释了问题。做得好,保持简单。 - Platinum Azure
1
这也非常有用!所以为了解决每个点,我做了以下操作: x3 = x1 + p(x2-x1)。对y和z进行重复操作。 - Nicros

7

这与数学有关,但没问题。假设给定两个点PQ,需要找到点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)...我敢打赌你已经知道了它 :)


@Simon 方程式不应该是X = P + r(Q-P),因为现在当r = 1时,我们得到的是2P-Q,这是不正确的。 - kkk

1

t从0到1变化。使用以下公式:

(x3, y3, z3) = (1-t)*(x1, y1, z1) + t*(x2, y2, z2)

当t=0时,得到第一个点。当t=1时,得到第二个点。

这种方法被称为线性插值


请用您的回答描述如何找到中间坐标点。 - Sagar Yadav

0

一个连接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个方程以获取点值。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接