我已将c ++代码转换为javascript,计算3点之间的角度。虽然它运作正常但我不理解它背后的数学。
function angle(a, b, c) {
var ab = { x: b.x - a.x, y: b.y - a.y };
var cb = { x: b.x - c.x, y: b.y - c.y };
var dot = (ab.x * cb.x + ab.y * cb.y); // dot product
var cross = (ab.x * cb.y - ab.y * cb.x); // cross product
var alpha = -Math.atan2(cross, dot);
if (alpha < 0) alpha += 2 * Math.PI;
return alpha;
}
&#13;
这里的点和叉产品有什么用? atan2如何使用交叉和点积计算角度?
答案 0 :(得分:2)
var ab = { x: b.x - a.x, y: b.y - a.y };
var cb = { x: b.x - c.x, y: b.y - c.y };
这些点代表AB和BC线。现在2行的点积是
dot = |AB|.|BC|.cos(theta)
cross = |AB|.|BC|.sin(theta)
他们的分工会得到
cross/dot = tan(theta)
所以
theta = atan(cross, dot)
我们知道点和十字的价值来自
dot = (ab.x * cb.x + ab.y * cb.y);
cross = (ab.x * cb.y - ab.y * cb.x);
因此我们可以使用上述信息找到角度