找到2点之间的具体点 - three.js

时间:2014-12-11 15:12:01

标签: vector three.js distance points

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

我知道这一点:mid point我可以找到他们之间的中间点,但我不想要中间点,我想找到他们之间的点,也有距离a从A点?

在这张图片中你可以看到我的意思:

enter image description here

谢谢。

3 个答案:

答案 0 :(得分:32)

基本上你需要获得两点之间的方向向量(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/

希望它有所帮助。

答案 1 :(得分:1)

我知道问题出在 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 :(得分:0)

这在两点之间称为lerp

例如三分: C =新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)
}