如何在 thgree.js 场景中找到 2 个点( A(x,y,z) 、 B(x,y,z) )之间的点( C (x,y,z) )?
我知道用这个:中点我可以找到它们之间的中点,但我不想要中间点,我想找到它们之间并且距A点距离a的点?
在这张图片中你可以明白我的意思:
谢谢你。
基本上,您需要获取两点 (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/
希望有帮助。
我知道问题是关于 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)
}