外推一条超过两个已知点的线

时间:2014-12-26 14:12:35

标签: java opengl

我真的很厌烦数学。不,更好的解释:我不知道如何解释数学符号。我的大脑无法解释它。这就是为什么我来编程社区寻求帮助"翻译"数学成为我理解的语言。

我在3d空间中有两组坐标代表视线。

Vector1(eyes) x=10 y=10 z=4
Vector2(lookingat) x=10 y=8 z=4.785

如何计算超出观察值的这些双倍值的点?例如,我们正在寻找超出线的2点?太空中的位置会是什么?

简而言之:

如何将一个给定点外推到由两个向量组成的直线上,并在该直线上给出双倍值。

a known
 \
  \
   \
    b known
     ?    
      ?     + 3
       ?
        c what is this value...

修改

借助@Thrustmaster的答案,我想出了这个精彩的解决方案。非常感谢:D

private Vec3 calculateLine(Vec3 x1, Vec3 x2, double distance) {
    double length = Math.sqrt(multiply(x2.xCoord - x1.xCoord) + multiply((x2.yCoord - x1.yCoord)) + multiply((x2.zCoord - x1.zCoord)));
    double unitSlopeX = (x2.xCoord-x1.xCoord) / length;
    double unitSlopeY = (x2.yCoord-x1.yCoord) / length;
    double unitSlopeZ = (x2.zCoord-x1.zCoord) / length;
    double x = x1.xCoord + unitSlopeX * distance;
    double y = x1.yCoord + unitSlopeY * distance;
    double z = x1.zCoord + unitSlopeZ * distance;
    return Vec3.createVectorHelper(x, y, x);
}
private double multiply(double one) {
    return one * one;
}

1 个答案:

答案 0 :(得分:7)

您需要开始寻找基本的3D坐标几何体。

在3D中,等式可写为:

x = x1 + unitSlopeX * distance
y = y1 + unitSlopeY * distance
z = z1 + unitSlopeZ * distance

..其中(x1,y1,z1)可以是线上的任何点;在这种情况下(10,10,4)。

下一组未知数是3个unitSlopes。要计算它,只需减去两个点(这将是你的矢量),然后除以矢量的长度。

length = sqrt((x2-x1)^2 + (y2-y1)^2 + (z2-z1)^2)
unitSlopeX = (x2-x1) / length
unitSlopeY = (y2-y1) / length
unitSlopeZ = (z2-z1) / length

现在,最后,得到你的第三个坐标,只需将距离(任何值)插入到本文开头的三个方程中。


在矢量符号中:

V = V1 + t * (V2 - V1) / | V2 - V1 |

..其中t是任何实数。