C# 两个角度的弧度差?
我有一个简单的图表,用户可以用弧度确定开始和结束方向。然后,控件使用覆盖C# 两个角度的弧度差?,c#,wpf,math,trigonometry,C#,Wpf,Math,Trigonometry,我有一个简单的图表,用户可以用弧度确定开始和结束方向。然后,控件使用覆盖OnRender绘制图表。我正在用StreamGeometryContext.ArcTo绘制圆弧。此方法具有一个IsLargeArc属性,用于确定如何绘制圆弧(对于>180度(PI)为true,对于
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;
}
//规则的方向(弧度)不超过180度,IsLargeArc=False,否则为true
if(Startthen End angle?)
{
//IsLargeArc=false;
}
其他的
{
//IsLargeArc=真;
}
当开始<结束时,问题就出现了。e、 g.从270度到120度。在这种情况下,我需要一个条件来满足180度以上的角度。数学不是我的强项。我想我需要在末尾加上π*2,然后以某种方式比较这两个值,但不确定如何实现这一点?好的,你可以在
结尾添加一个完整的圆(或开始;根据方向)角度,例如:
if (start < end)
start += 2 * Math.PI; //full circle in radians.
if(开始<结束)
开始+=2*Math.PI//以弧度表示的完整圆。
通过这种方式,您将向结束角度添加一个完整的圆,这不会更改图形的位置,并且如果减去它们(开始-结束
),将得到一个有效且正确的角度
尽管我必须说,我希望出现start>end
条件
如果start>end
或visa反之亦然,则这会告诉您有关方向的信息。您可以使用该方法获得差值的绝对值
您的代码可能如下所示:
if ((Start < Math.PI && Math.Abs(End - Start) < Math.PI) ||
(Start > Math.PI && End - Start < 0 ))
{
//IsLargeArc = false;
}
else
{
//IsLargeArc= true;
}
if((StartMath.PI&&End-Start<0))
{
//IsLargeArc=false;
}
其他的
{
//IsLargeArc=真;
}
如您所述,一个完整的圆(即360度)等于2*pi
弧度。“问题出现在开始<结束时。例如,从270度到120度。在这种情况下,我需要一个条件来满足180度(pi)以上的角度”-您能详细说明一下吗?期望的是什么?你所说的“开始是<结束和得到的角度-PI…”是指开始<结束+数学.Abs(结束-开始)-数学.PIso在你已经描述过的情况下,你想像处理LargeArc一样处理它吗?那么你不需要另一个条件,因为Math.Abs(结束-开始)<数学.PI满足这个条件
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);
}