java - 外推超过两个已知点的直线

标签 java opengl

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

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

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

如何计算具有这些超出观察值的 double 值的点?例如,什么位于我们正在寻找的线之外 2 点?那会是太空中的什么位置?

简而言之:

如何将给定点外推到由沿线具有给定 double 值的两个 vector 组成的线之外。

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;
}

最佳答案

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

在 3D 中,等式可以写成:

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

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

下一组未知数是所有 3 个单位斜率。要计算它,只需减去两个点(这将为您提供一个 vector ),然后除以 vector 的长度。

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

现在,为了最终获得您的第三个坐标,只需将距离(任何值)代入本文开头的三个方程式即可。


在 vector 符号中:

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

.. 其中 t 是任何实数。

关于java - 外推超过两个已知点的直线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27658220/

相关文章:

java - 自定义ListView不显示

java - NumberFormat 解析不够严格

c - OpenGL 中的洛伦兹吸引子

c++ - 如果我只需要它在其他线程中的值,我是否应该在一个线程中锁定一个变量,如果我不这样做,为什么它会起作用?

c++ - Box2D:程序在破坏 b2Body 时崩溃

c++ - 如何检查鼠标点击是否在某个区域

c++ - SDL/OpenGL 结果不一致?

java - Jooq如何根据组合键查询实体

java - XML 配置与基于注释的配置

java - 无法解析符号 'ButterKnife'