我正在做一个小项目,我有一些粒子我想要移动到目标位置而不超过最大速度,首先我试图单独加上X和Y速度,这导致两者的斜边能够超过最高速度,然后我记得我的数学课并尝试了这个:
var totalVel = Math.sqrt(Math.pow(curVelocity[0],2) + Math.pow(curVelocity[1],2));
if(totalVel > maxSpeed){
//sin(θ) = Opposite / Hypotenuse
var angle = Math.asin(curVelocity[1]/totalVel);
var newHyp = maxSpeed;
var newOp = Math.sin(angle)*newHyp;
var newAdj = Math.sqrt(Math.pow(newHyp,2) - Math.pow(newOp,2));
curVelocity[1] = newOp;
curVelocity[0] = newAdj;
}
(curVelocity是索引0为X且索引1为Y的数组) 这很好地适用于时间,另一次它远离目标,它试图到达..在Y平面上匹配它但在X平面中朝向整个错误的方向。我猜测它与使用math.sin有关,或许它不再适用于它的旅行方向,但我不知道哪里开始区分使用什么,或者这个想法是否正确。
我可以在this location here找到我正在谈论的实例,刷新页面将改变起始位置和目标位置,黑色圆圈是绿色圆圈是目标位置的粒子