为了账号安全,请及时绑定邮箱和手机立即绑定

如何绘制一个(值)%的圆

如何绘制一个(值)%的圆

C#
智慧大石 2021-05-13 14:27:42
我想用它Path来绘制部分圆,例如25%的圆(1 / 4、90度的圆,360度是一个完整的圆)ArcSegment,但是我可以用25%的圆来简化,因为数字很简单,而且您很容易猜到重点。但是,当我想绘制20%的圆(1/5 72度的圆)时,我无法再猜测了,因为它不是浮点值,所以我想出了4个方程For 0->90 degree (unit value = Degree (Eg: 20degree)) x,y = ArcSegment.Point(x,y) x = (PathWidth / 2) + [Sin(value) *50]  y = [Sin(value) *50]For 90->180 degree  x, y= (PathWidth / 2) + [Sin(value) *50]For 180->270 : Sorry I don't know ;(例如,我想在100x100路径中(起点为50,0)设置25%的圆,然后25%为1/4 = 90度:应用我上面提到的公式,我们有:x = (100/2) + Sin(90) * 50 = 100y = Sin(90) * 50 = 50因此,ArcSegment.Point =“ 100,50”,我们绕了50%但我认为该方程式无效,并且可能(我尚未验证)不准确,我们需要4个方程式才能完成部分圆(1-> 99%)的圆。所以你能改善我上面使用的方程式吗对不起,我的英语不好,因为英语不是我的母语。
查看完整描述

1 回答

?
慕尼黑8549860

TA贡献1818条经验 获得超11个赞

下面的方法创建了一个PathGeometry带有单个圆的ArcSegment,它可以从 0 到 360 度,但不包括 360 度。圆的中心是一个坐标(0, 0)。


IsLargeArc如果角度大于180度,则将ArcSegment的属性设置为true很重要。


private Geometry CreateArc(double radius, double angle)

{

    var endPoint = new Point(

        radius * Math.Sin(angle * Math.PI / 180),

        radius * -Math.Cos(angle * Math.PI / 180));


    var segment = new ArcSegment(

        endPoint, new Size(radius, radius), 0,

        angle >= 180, SweepDirection.Clockwise, true);


    var figure = new PathFigure { StartPoint = new Point(0, -radius) };

    figure.Segments.Add(segment);


    var geometry = new PathGeometry();

    geometry.Figures.Add(figure);


    return geometry;

}

如果需要绘制一个完整的圆,则必须添加第二个ArcSegment,或者返回EllipseGeometry。


查看完整回答
反对 回复 2021-05-29
  • 1 回答
  • 0 关注
  • 132 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信