角度不正确,计算错误的一面

Bro*_*ier 7 javascript math angle

我需要计算3点之间的角度.为此,我执行以下操作:

  1. 抓住3个点(之前,当前和下一个,它在一个循环内)
  2. 用毕达哥拉斯计算点之间的距离
  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)

代码中有什么问题,我忘了做某事,还是应该以完全不同的方式完成?

ZJS*_*ZJS 4

你好,你的数学和计算都很完美。您遇到了大多数人在计算器上遇到的同样问题,那就是方向。我要做的是找出该点是否位于使用此代码的前两个点创建的向量的左侧或右侧,我从

确定点位于直线的哪一侧

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 度