Bro*_*ier 7 javascript math angle
我需要计算3点之间的角度.为此,我执行以下操作:
Math.acos对于没有超过180度角度的形状,这似乎工作正常,但是如果形状有这样的角,则计算短边.这是一个说明我的意思(红色值是错误的):

这是进行计算的代码:
// Pythagoras for calculating distance between two points (2D)
pointDistance = function (p1x, p1y, p2x, p2y) {
return Math.sqrt((p1x - p2x)*(p1x - p2x) + (p1y - p2y)*(p1y - p2y));
};
// Get the distance between the previous, current and next points
// vprev, vcur and vnext are objects that look like this:
// { x:float, y:float, z:float }
lcn = pointDistance(vcur.x, vcur.z, vnext.x, vnext.z);
lnp = pointDistance(vnext.x, vnext.z, vprev.x, vprev.z);
lpc = pointDistance(vprev.x, vprev.z, vcur.x, vcur.z);
// Calculate and print the angle
Math.acos((lcn*lcn + lpc*lpc - lnp*lnp)/(2*lcn*lpc))*180/Math.PI
Run Code Online (Sandbox Code Playgroud)
代码中有什么问题,我忘了做某事,还是应该以完全不同的方式完成?
你好,你的数学和计算都很完美。您遇到了大多数人在计算器上遇到的同样问题,那就是方向。我要做的是找出该点是否位于使用此代码的前两个点创建的向量的左侧或右侧,我从
isLeft = function(ax,ay,bx,by,cx,cy){
return ((bx - ax)*(cy - ay) - (by - ay)*(cx - ax)) > 0;
}
Run Code Online (Sandbox Code Playgroud)
其中 ax 和 ay 构成你的第一个点 bx 和你的第二个点,cx cy 构成你的第三个点。
如果是在左边,只需将你的角度加上 180 度
| 归档时间: |
|
| 查看次数: |
352 次 |
| 最近记录: |