【问题标题】:Find specific point between 2 points - three.js查找 2 点之间的特定点 - three.js
【发布时间】:2015-02-10 03:01:18
【问题描述】:

如何在 thgree.js 场景中的 2 个点( A(x,y,z) 、 B(x,y,z) )之间找到一个点( C (x,y,z) )?

我知道这样:mid point 我可以找到它们之间的中间点,但我不想要中间点,我想找到它们之间的点,并且距离 A 点也有距离?

在这张图片中你可以明白我的意思:

谢谢。

【问题讨论】:

标签: vector three.js distance points


【解决方案1】:

基本上你需要得到两点(D)之间的方向向量,对其进行归一化,然后你将用它来获取新的点:NewPoint = PointA + D*Length

您可以使用归一化的长度 (0..1) 或从 0 到方向向量长度的绝对值。

在这里您可以看到一些使用这两种方法的示例:

使用绝对值:

function getPointInBetweenByLen(pointA, pointB, length) {

    var dir = pointB.clone().sub(pointA).normalize().multiplyScalar(length);
    return pointA.clone().add(dir);

}

与百分比一起使用 (0..1)

function getPointInBetweenByPerc(pointA, pointB, percentage) {

    var dir = pointB.clone().sub(pointA);
    var len = dir.length();
    dir = dir.normalize().multiplyScalar(len*percentage);
    return pointA.clone().add(dir);

}

查看实际操作:http://jsfiddle.net/0mgqa7te/

希望对你有帮助。

【讨论】:

    【解决方案2】:

    我知道问题是针对 THREE.JS 的,我最终在 Babylon JS 中寻找类似的东西。

    以防万一,如果您使用的是 Babylon JS Vector3,那么公式将转换为:

    function getPointInBetweenByPerc(pointA, pointB, percentage) {
    
        var dir = pointB.clone().subtract(pointA);
        var length = dir.length();
        dir = dir.normalize().scale(length *percentage);
        return pointA.clone().add(dir);
    
      }
    

    希望对某人有所帮助。

    【讨论】:

      【解决方案3】:

      这在两点之间称为lerp

      例如在三: C = new Three.Vector3() C.lerpVectors(A, B, a)

      一般来说,这只是每个轴上的单个 lerp(线性插值)数学(基本上是(a * t) + b * (1 - t))。 Lerp可以这样描述:

      function lerp (a,  b,  t) {
          return a + t * (b - a)
      }
      

      在你的情况下(见上文):

      A = {
        x: lerp(A.x, B.x, a),
        y: lerp(A.y, B.y, a),
        z: lerp(A.z, B.z, a)
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-06-25
        相关资源
        最近更新 更多