弧度中两个角度的差异?

时间:2016-01-27 09:21:49

标签: c# wpf math trigonometry

我有一个简单的图表,用户可以确定一个开始&amp;弧度的终点方向。然后,控件使用覆盖OnRender绘制图表。我用StreamGeometryContext.ArcTo绘制弧线。此方法具有IsLargeArc属性,用于确定绘制弧的方式(对于> 180度(PI)为true,对于<180度为false)。我从一个正常的条件确定这个值:

 //Rule does not exceed 180 degrees in direction (radian), IsLargeArc= False else true
 if (Start < Math.PI && (End - Start) < Math.PI || //currently unknow condition in here to deal with < PI when start angle is > then end angle?)
  {
     //IsLargeArc = false;
  }
  else
  {
     //IsLargeArc= true;
  }

enter image description here

问题来自于开始&lt;结束。例如从270度到120度。在这种情况下,我需要满足180度(PI)角度的条件。数学不是我的强项。我想我需要将PI * 2添加到最后,然后以某种方式比较这两个值,但不确定如何实现这一点?

3 个答案:

答案 0 :(得分:4)

好吧,你可以在end,(或开始;根据方向)角度添加一个完整的圆圈,例如:

if (start < end)
    start += 2 * Math.PI; //full circle in radians.

这样您就可以在结束角度上添加一个完整的圆圈,这样就不会改变绘图的位置,如果减去它们会产生有效且正确的角度(start - end

虽然我必须说,我希望start > end条件。

如果start > end或反之亦然,则告诉您有关方向的信息。

答案 1 :(得分:2)

您可以使用Math.Abs方法获取差异的绝对值。

您的代码可能如下所示:

  if  ((Start < Math.PI && Math.Abs(End - Start) < Math.PI) || 
        (Start > Math.PI && End - Start < 0 ))
    {
        //IsLargeArc = false;
    }
    else
    {
        //IsLargeArc= true;
    }

答案 2 :(得分:1)

  private bool IsLargeArc(Styled2DRange range)
    {
        double angleDiff = GetPositiveAngleDifference(End - Start);

        if (angleDiff > Math.PI)
        {
            return true;
        }

        return false;
    }

    private double GetPositiveAngleDifference(double angleDiff)
    {
        return (angleDiff + (2*Math.PI))%(2*Math.PI);
    }