【发布时间】:2011-02-23 07:08:24
【问题描述】:
从 WPF 线计算角度的“正确”算法是什么?
【问题讨论】:
从 WPF 线计算角度的“正确”算法是什么?
【问题讨论】:
要转换为度数,您可以使用乘数(180 度/Math.PI 弧度)。通过注意 Math.PI 弧度等于 180 度来获得此转换因子。因此,如果 theta1 是弧度,那么 theta2 = theta1 * (180/Math.PI) 将等价于 theta1,只是它的单位是度数。
要计算直线的角度,您可以使用三角函数的标准正切公式,然后取两边的反正切得到 theta
tan(theta) = 相反 / 相邻 -> theta = 反正切(相反 / 相邻)
这可以通过形成一个适当的三角形应用于您的线条。为此,请选择直线 (x1, y1) 和 (x2, y2) 上的任意两个点。然后,您可以形成一个独特的直角三角形,斜边是 (x1, y1) 和 (x2, y2) 之间的线段,对边是长度为 (y2 - y1) 的垂直线段,相邻边是水平线长度为 (x2 - x1) 的线段。
你可以通过计算来计算theta值
Double theta = (180/Math.PI) * Math.Atan2(opposite, adjacent);
该函数将自动处理相邻为零时的情况(这通常会导致除以零错误),并将返回最合适的角度(90 度或 -90 度),除非同时相反和相邻为零。在这种情况下,theta 为零,这没有多大意义。在这种情况下,它确实应该抛出一个异常,因为没有办法从数学上确定斜边长度为零的三角形的角度。
【讨论】:
atan2来说是没有问题的,这个函数不分。实际上,atan2 比 atan 更强,因为后者无法区分象限 1 和象限 3,等等。