在给定距离处沿着线找到3D点

时间:2012-10-19 15:58:46

标签: line distance direction

我遇到了问题,如果我的解决方案是正确的,请告诉我。

我有一个已知的点,在位置A(x1,y1,z1)和原点O(0,0,0),我想找到一个点B(x2,y2,z2)的坐标位于OA线上,距离OB是OA的1.2倍。

所以,我的想法是获得由点O和A形成的线的方程。 OA的方向是(-x1,-y1,-z1),因此该方程为:

x = -x1 * t;

y = -y1 * t;

z = -z1 * t;

距离OA是sqrt((x1-0)^ 2 +(y1-0)^ 2 +(z1-0)^ 2)。 KNOWN

距离OB是sqrt((x2-0)^ 2 +(y2-0)^ 2 +(z2-0)^ 2)。 UNKNOWN

我可以替换距离OB中线方程确定的x,y,z点,结果应该是距离OA的1.2倍。

所以,sqrt(( - x1 * t-0)^ 2 +( - y1 * t-0)^ 2 +( - z1 * t-0)^ 2)= 1.2 * dist(OA)。

我从这里找到t,求解二次方程,然后通过替换该方程中的t来获得该点的坐标。

这是对的吗?

感谢您的时间。

编辑: 这是我的代码:

rangeRatio = 1.114;

norm = sqrt((P2(1) - P1(1))^2 + (P2(2) - P1(2))^2 + (P2(3) - P1(3))^2);

P3(1) = P1(1) + ((P2(1,1) - P1(1)) /norm) * rangeRatio;
P3(2) = P1(2) + ((P2(1,2) - P1(2)) /norm) * rangeRatio;
P3(3) = P1(3) + ((P2(1,3) - P1(3)) /norm) * rangeRatio;

我也尝试了norm = 1,我得到的结果略有不同,但仍然不总是colinear。

谢谢

1 个答案:

答案 0 :(得分:3)

甚至更容易;你可以将a,b和c乘以1.2。这给出的线是原始线的1.2倍。