因為在CAD二次開發中,圓弧的StartAngle屬性和EndAngle屬性都是從0-2PI的范圍,那么是的直接用公式等分只會算到從較小角度到較大角度逆時針之間的點,另外的情況無法算出(具體情況太難描述,可以自己去試
) ,本原始碼通過幅角和 StartAngle、EndAngle的差值判斷屬于哪一邊的弧。從而解決問題。是否有更簡單的方法請各位大神指點private List<Point2d> GetDiviePointList(Arc arc)
{
List<Point2d> pointList = new List<Point2d>();
Point3d center = arc.Center;
double radius = arc.Radius;
double startAngle = arc.StartAngle;
double endAngle = arc.EndAngle;
double totalAngel = arc.TotalAngle;
double startToEndAngel = Math.Abs(endAngle - startAngle);
if (startToEndAngel != totalAngel && totalAngel != Math.PI)
{
startAngle -= 2 * Math.PI;
}
else if (totalAngel == Math.PI && startAngle > endAngle)
{
startAngle -= 2 * Math.PI;
}
int numberOfPolylineSegment = 100;
double step = (endAngle - startAngle) / numberOfPolylineSegment;
for (int i = 0; i <= numberOfPolylineSegment; i++)
{
Point2d pt = new Point2d(center.X + radius * Math.Cos(i * step + startAngle), center.Y + radius * Math.Sin(i * step + startAngle));
pointList.Add(pt);
}
return pointList;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/46352.html
標籤:C#
