Reputation: 232
I want to use Path
to draw a partly circle like 25% circle (1/4, 90degree circle, 360 degree is a full circle)
I can use ArcSegment
to do that, but 25% is easy because the number is simple and you can easily guess the point. But when I want to draw a 20% circle 1/5 72degree circle) I can't guess anymore be cause the is not a float value so I came up with 4 Equations
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 ;(
For example I want a 25% circle in a 100x100 Path (Start point is 50,0) then 25% is 1/4 = 90 degree: Apply my equation I mention above, We have:
x = (100/2) + Sin(90) * 50 = 100
y = Sin(90) * 50 = 50
So the ArcSegment.Point="100,50" and we a 50% circle
But I think the equation is not effective and maybe( I not verify yet) Inaccurate and we need 4 equations to accomplish the a partly circle (1->99%) circle. So Could you improve the equation I use above
Sorry for my bad English because English is not my first language.
Upvotes: 0
Views: 927
Reputation: 128061
The following method creates a PathGeometry
with a single circular ArcSegment
, which will work from 0 up to, but not including, 360 degrees. The center of the circle is a coordinates (0, 0)
.
It is important to set the ArcSegment's IsLargeArc
property to true if the angle is larger than 180 degrees.
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;
}
If you need to draw a full circle, you'll have to add a second ArcSegment, or return an EllipseGeometry.
Upvotes: 2