猿问

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

我想用它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 = 100

y = Sin(90) * 50 = 50

因此,ArcSegment.Point =“ 100,50”,我们绕了50%


但我认为该方程式无效,并且可能(我尚未验证)不准确,我们需要4个方程式才能完成部分圆(1-> 99%)的圆。所以你能改善我上面使用的方程式吗


对不起,我的英语不好,因为英语不是我的母语。


智慧大石
浏览 133回答 1
1回答

慕尼黑8549860

下面的方法创建了一个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。
随时随地看视频慕课网APP
我要回答