3点間の角度を計算する必要があります。このために、私は次のことを行います。
- 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
コードに何か問題がありますか、何かをするのを忘れましたか、それともまったく別の方法で行う必要がありますか?