如何在three.js场景中找到两个点(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/
希望它有所帮助。
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)
}
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);
}