I written a small function to render circle segment. It seems that it works ok.
Please review it, may be I didn't take into account something :)
private static void DrawCircleSegment
( RenderWindow window,
Vector2f origin,
float radius,
float angle,
float length,
Color color,
int maxPoints
) { var ptCount
= (int)(length
* maxPoints
/ 2D
* Math
.PI + 0
.5F
); ptCount
= Math
.Min(ptCount,
2); ptCount
= Math
.Max(ptCount, maxPoints
); var arc
= GeometryHelper
.CreateArcGeometry(radius, angle, length, ptCount
); var center
= new Vector2f
(0F, 0F
); var vertices
= arc
.Zip(arc
.Skip(1),
(p1, p2
) => new[] { center, p1, p2,
}) .SelectMany(arg
=> arg
) .Select(arg
=> new Vertex
(origin
+ arg, color
)); window
.Draw(vertices
.ToArray(), PrimitiveType
.Triangles); } public static class GeometryHelper
{ public static Vector2f
[] CreateArcGeometry
( float radius,
float angle,
// 0F...2*PI float length,
// 0F...2*PI int segmentCount
) { var theta
= length
/ segmentCount
; var sin
= (float)Math
.Sin(theta
); var cos
= (float)Math
.Cos(theta
); var point
= new Vector2f
( radius
* (float)Math
.Cos(angle
),
radius
* (float)Math
.Sin(angle
)); var result
= new Vector2f
[segmentCount
+ 1]; for (var i
= 0; i
< result
.Length; i
++) { result
[i
] = point
; point
= new Vector2f
( cos
* point
.X - sin
* point
.Y,
sin
* point
.X + cos
* point
.Y); } return result
; } }