3点之间的角度数学解释

时间:2017-08-18 10:33:54

标签: javascript c++ math vector

我已将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;
&#13;
&#13;

这里的点和叉产品有什么用? atan2如何使用交叉和点积计算角度?

1 个答案:

答案 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);

因此我们可以使用上述信息找到角度