如何使用system . windows . shape . path绘制圆的一部分
本文关键字:绘制 一部分 path shape 何使用 system windows | 更新日期: 2023-09-27 18:13:32
我有一个Silverlight应用程序,我通过实例化system . windows . shape . line实例在图片上绘制线条,然后将其添加到MainCanvas.Children.
我想类似地添加一些圆段。如果我理解正确的话,我想使用Path类。
我有以下需求。圆心的坐标是(x,y)我有半径r,我需要画一个圆弧,它是圆心为(x,y),半径为r的圆的子集。我有两个角a1和a2,我需要在它们之间画圆弧。
我该怎么做?
你需要使用PathGeometry语法。
考虑如下内容:
<Path Stroke="Black" Fill="Transparent">
<Path.Data>
<PathGeometry Figures="M 0,0 A 15,15 90 0 1 15,15" />
</Path.Data>
</Path>
这将画一个90度的圆弧,从0,0
开始,以顺时针方向结束于15,15
。
您需要构建一个字符串,使用圆弧来标识路径,这是WPF支持的。该字符串遵循本页的语法。
但是,必须首先将参数转换为语法中给出的arc格式,因为使用的值有点不同:
首先,将角度a1
和a2
转换为弧度,如果它们还没有。
a1=a1*Math.PI/180;
a2=a2*Math.PI/180;
然后,计算圆弧的起点和终点:
double startX = centerX+Math.Cos(a1)*r;
double startY = centerY+Math.Sin(a1)*r;
double endX = centerX+Math.Cos(a2)*r;
double endY = centerY+Math.Sin(a2)*r;
然后,计算角度之差是否大于等于PI,然后计算a1是否小于a2。
bool largeArc = Math.Abs(a2-a1)>=Math.PI;
bool sweep = (a1<a2);
最后,构造路径。
string path=String.Format(System.Globalization.CultureInfo.InvariantCulture,
"M {0},{1} A {2},{3} 0 {4} {5} {6},{7}",startX,startY,r,r,
largeArc ? 1 : 0, sweep ? 1 : 0,endX,endY);
这是路径字符串,而不是path对象,您将在定义路径时使用。