C# 绘制角度范围为-360到360度的圆弧

C# 绘制角度范围为-360到360度的圆弧,c#,wpf,geometry,trigonometry,autocad,C#,Wpf,Geometry,Trigonometry,Autocad,我在实现绘制圆弧时遇到了一些问题。基本上,它应该像在AutoCAD中绘制3点圆弧一样绘制。我可以让弧以从-180度到360度的开始角和结束角绘制,但是如果我尝试超过-180度,弧会翻转到+180度。我的问题是,当角度通过-180时,我需要圆弧继续。除了计算起始角和结束角,我认为代码中的所有内容都是正确的。提前感谢您的帮助。这是我的密码: private void DrawArc() { //fyi linept is of type List<Point3D>();

我在实现绘制圆弧时遇到了一些问题。基本上,它应该像在AutoCAD中绘制3点圆弧一样绘制。我可以让弧以从-180度到360度的开始角和结束角绘制,但是如果我尝试超过-180度,弧会翻转到+180度。我的问题是,当角度通过-180时,我需要圆弧继续。除了计算起始角和结束角,我认为代码中的所有内容都是正确的。提前感谢您的帮助。这是我的密码:

private void DrawArc()
{
    //fyi linept is of type List<Point3D>();

    Point3D currentPoint = (Point3D)GetPoints(e);
    double rad;
    Point3D center = GetCenterOfCircle(linept.ElementAt(0), linept.ElementAt(1), currentPoint, out rad);
    PieSliceVisual3D circle = new PieSliceVisual3D();
    circle.Center = center;
    circle.OuterRadius = rad;
    circle.InnerRadius = circle.OuterRadius + 3;
    circle.StartAngle = (Math.Atan2(linept.ElementAt(0).Y - center.Y, linept.ElementAt(0).X - center.X) * 180 / Math.PI);
    circle.EndAngle = (Math.Atan2(currentPoint.Y - center.Y, currentPoint.X - center.X) * 180 / Math.PI);

    //I've also tried these next 4 lines to no avail
    double startAngle = (Math.Atan2(linept.ElementAt(0).Y - center.Y, linept.ElementAt(0).X - center.X) * 180 / Math.PI);
    circle.StartAngle = (startAngle > 0.0 ? startAngle : (360.0 + startAngle));
    double endAngle = (Math.Atan2(currentPoint.Y - center.Y, currentPoint.X - center.X) * 180 / Math.PI);
    circle.EndAngle = (endAngle > 0.0 ? endAngle : (360.0 + endAngle));
}
private void DrawArc()
{
//仅供参考的linept类型为List();
Point3D currentPoint=(Point3D)获取点(e);
双rad;
Point3D center=GetCenterOfCircle(linept.ElementAt(0)、linept.ElementAt(1)、currentPoint、out rad);
PieSiceVisual3D圆圈=新PieSiceVisual3D();
圆心=圆心;
外圆=弧度;
圆内半径=圆外半径+3;
circle.StartAngle=(Math.Atan2(linept.ElementAt(0.Y-center.Y),linept.ElementAt(0.X-center.X)*180/Math.PI);
circle.EndAngle=(数学Atan2(currentPoint.Y-center.Y,currentPoint.X-center.X)*180/Math.PI);
//我也试过下面4行,但都没用
double startAngle=(数学Atan2(linept.ElementAt(0.Y-center.Y),linept.ElementAt(0.X-center.X)*180/Math.PI);
circle.StartAngle=(StartAngle>0.0?StartAngle:(360.0+StartAngle));
双端角=(数学Atan2(currentPoint.Y-center.Y,currentPoint.X-center.X)*180/Math.PI);
圆.EndAngle=(EndAngle>0.0?EndAngle:(360.0+EndAngle));
}

如何调用
Graphics.DrawArc
?它接受
startAngle
sweepAngle
(而不是
endAngle
),因此您可以演示您执行计算吗?当终点的角度低于起点时会发生什么情况?很久以前,当我实现这种性质的函数时,我发现最好的答案是检查这一点,并在需要时添加360度——起点限制为0..359,终点限制为0..719,从而确保所有圆弧都是逆时针绘制的——这是我使用的图形库的限制。你会面临同样的问题吗?我没有使用Graphics.DrawArc。我应该提到我正在使用Helix 3D工具包和PieSiceVisual3D绘制圆弧。很抱歉搞混了。图中显示了计算起点和终点角度的方法(我试过的两种方法)。Loren,我试过了,当我想从0-360画一个圆弧时效果很好,但如果我想以另一种方式弯曲圆弧,它将不允许它发生。@JustAsk:你是什么意思,以另一种方式弯曲圆弧?开始角度>结束角度,还是说绕过0点的角度?在我看来,你的打击和我的一样。