簡體   English   中英

如何畫一個(值)%的圓

[英]How to draw a (value)% Circle

我想使用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%)的圓。 所以你能改善我上面使用的方程式嗎

對不起,我的英語不好,因為英語不是我的母語。

以下方法使用單個圓形ArcSegment創建一個PathGeometry ,它將在0到但不包括360度的范圍內工作。 圓的中心是坐標(0, 0)

如果角度大於180度,則將ArcSegment的IsLargeArc屬性設置為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。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM