查找 2 点之间的特定点 - Three.js

问题描述 投票:0回答:3

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

我知道用这个:中点我可以找到它们之间的中点,但我不想要中间点,我想找到它们之间并且距A点距离a的点?

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

enter image description here

谢谢你。

vector three.js distance points
3个回答
41
投票

基本上,您需要获取两点 (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/8mnqjsge/

希望有帮助。


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

  }

希望它对某人有帮助。


2
投票

这被称为两点之间的

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)
}
© www.soinside.com 2019 - 2024. All rights reserved.