【发布时间】: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
如何在 thgree.js 场景中的 2 个点( A(x,y,z) 、 B(x,y,z) )之间找到一个点( C (x,y,z) )?
我知道这样:mid point 我可以找到它们之间的中间点,但我不想要中间点,我想找到它们之间的点,并且距离 A 点也有距离?
在这张图片中你可以明白我的意思:
谢谢。
【问题讨论】:
标签: vector three.js distance points
基本上你需要得到两点(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/
希望对你有帮助。
【讨论】:
我知道问题是针对 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);
}
希望对某人有所帮助。
【讨论】:
这在两点之间称为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)
}
【讨论】: