ImageSharp中使用EllipsePolygon绘制圆形及圆弧问题
ImageSharp PathBuilder 绘制圆形、圆弧方案
正圆绘制方案
你当前使用AddEllipticalArc传入等长半径、360度扫描角的写法可以生成正圆,但不是最优实现:
EllipsePolygon本身就实现了IPath接口,不需要绕路调用弧段方法,直接调用AddPath传入实例即可,参数语义更清晰,也不会出现浮点精度导致的360度弧首尾衔接缺口问题:
// 圆心(300,200) 半径10的正圆 pb.AddPath(new EllipsePolygon(new Point(300, 200), 10));
AddEllipticalArc的适用场景是绘制非闭合的椭圆/正圆弧段,用来画整圆属于能用但不够合理的写法,可读性差,也容易因为角度、旋转参数传错导致图形变形,部分低版本还会因为浮点计算误差出现首尾不闭合的细缺口。
给定圆心+起终点绘制圆弧方案
不需要手动计算起始角、扫描角,PathBuilder已经提供了对应点坐标的重载方法,直接传参即可:
- 调用
AddArc重载,依次传入圆心坐标、圆弧起点坐标、圆弧终点坐标,再指定两个枚举参数即可:SweepDirection:指定弧段绘制方向,可选顺时针/逆时针ArcSize:指定当两点对应两段弧时,取大弧段还是小弧段
示例代码:
Point center = new Point(300, 200); Point arcStart = new Point(310, 200); Point arcEnd = new Point(300, 210); // 顺时针绘制两点间的小弧 pb.AddArc(center, arcStart, arcEnd, SweepDirection.Clockwise, ArcSize.Small);
这个方法内部已经封装了角度换算、半径校验的逻辑,不需要自己做数学计算。
内容的提问来源于stack exchange,提问作者Walle
相关产品推荐
相关产品推荐

