【发布时间】:2017-02-10 12:08:30
【问题描述】:
我在 SVG 画布中有两条直线作为 <path>。使用 LineA (A1x, A1y) (A2x, A2y) 和 LineB (B1x, B1y) (B2x, B2y) 的像素坐标如何计算这些线之间的角度。
我有下面的代码,它适用于三个点(它适用于下图中的绿色案例)。 (A2x, A2y) != (B1x, B1y)时不起作用。
如何修改此公式以使其即使在未连接线的情况下也能正常工作。
function find_angle(p0,p1,c) {
var p0c = Math.sqrt(Math.pow(c.x-p0.x,2)+
Math.pow(c.y-p0.y,2));
var p1c = Math.sqrt(Math.pow(c.x-p1.x,2)+
Math.pow(c.y-p1.y,2));
var p0p1 = Math.sqrt(Math.pow(p1.x-p0.x,2)+
Math.pow(p1.y-p0.y,2));
var angle = Math.acos((p1c*p1c+p0c*p0c-p0p1*p0p1)/(2*p1c*p0c));
return angle * (180 / Math.PI);
}
【问题讨论】:
-
2D 向量将使用点积或叉积轻松为您提供这个答案。我更喜欢后者,因为你有两个角度可供选择。叉积允许您通过指定平面外方向来选择哪一个。
-
无论您使用 (p0,p1,c) 还是 (p1,p0,c) 调用,您当前的函数都会为您提供相同的结果。这真的是你想要的吗?
标签: javascript math svg angle