【问题标题】:Need algorithm for angle of WPF line需要WPF线角度的算法
【发布时间】:2011-02-23 07:08:24
【问题描述】:

从 WPF 线计算角度的“正确”算法是什么?

【问题讨论】:

    标签: .net wpf geometry


    【解决方案1】:

    您需要atan2。但是,这会给您以弧度为单位的角度,转换为度数必须很容易:-) 角度计算为atan2(y2 - y1, x2 - x1),其中(x1, y1)(x2, y2) 是您的线端。

    注意常量pi 也是available

    【讨论】:

      【解决方案2】:

      要转换为度数,您可以使用乘数(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来说是没有问题的,这个函数不分。实际上,atan2atan 更强,因为后者无法区分象限 1 和象限 3,等等。
      • 我明白了,Atan2 不会为长度为零的相邻边抛出异常。当相邻边的长度为零时,它会捕获这种情况并返回 90 度(Pi/2 弧度)或 -90 度(-Pi/2 弧度)。对于其他情况,它只使用反正切的标准公式。
      猜你喜欢
      • 2015-03-17
      • 1970-01-01
      • 1970-01-01
      • 2022-11-14
      • 1970-01-01
      • 2019-12-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多