[英]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.