【发布时间】:2019-06-28 09:47:37
【问题描述】:
我有一个程序,我点击了三次,每次点击都会在画布上创建一个点。然后我计算这三个点之间的角度,如下所示:
function find_angle(A, B, C) {
var AB = Math.sqrt(Math.pow(B.x - A.x, 2) + Math.pow(B.y - A.y, 2));
var BC = Math.sqrt(Math.pow(B.x - C.x, 2) + Math.pow(B.y - C.y, 2));
var AC = Math.sqrt(Math.pow(C.x - A.x, 2) + Math.pow(C.y - A.y, 2));
return Math.acos((BC * BC + AB * AB - AC * AC) / (2 * BC * AB));
}
在上面的示例图片中,计算出的角度为 93°。我需要将point 3 移动-3°,以便点正好成90°。我有这个功能:
var angleToCorrect = alpha * (Math.PI / 180) - 90 * (Math.PI / 180);
correct_angle(point2, point3, angleToCorrect)
...
function correct_angle(p2, p3, angle) {
var x = p2.x - p3.x;
var y = p2.y - p3.y;
var r = Math.sqrt(x * x + y * y); //circle radius. origin of the circle is point 2
return {
X: p2.x + (Math.cos(angle) * r),
Y: p2.y + (Math.sin(angle) * r)
};
}
现在,这个函数应该返回新的x 和y 为point 3 校正角度为90°。然而坐标不符合我的预期。有人可以指出我做错了什么吗?
【问题讨论】:
-
坐标与我的预期不一致 - 请向我们提供输入和预期输出。
-
您计算的点是距离 x 轴
angle度,而不是通过 p2 和 p3 的线。 -
如果
angleToCorrect是计算出的角度来应用到点来纠正你的角度,我们应该知道alpha是什么,它是如何计算的以及它的值是否正确,然后开始. -
@Kaddath alpha 显示在图像中。
-
但是,考虑到基于向量的方法可能更有用:您要解决的原始问题是什么?例如,限制第三点的位置会容易得多,因此角度始终为 90°。
标签: javascript math geometry