如果我有一条闭合路径,我可以使用Geometry.GetArea()
来近似我的形状的面积。这太棒了,节省了我很多时间。但是周围有什么东西可以帮助我找到一条未闭合路径的长度吗?
我现在能想到的最好办法就是确保我正在使用PathGeometry
并致电GetPointAtFractionLength
方法多次,获取点并将所有这些点之间的距离相加。
Code:
public double LengthOfPathGeometry(PathGeometry path, double steps)
{
Point pointOnPath;
Point previousPointOnPath;
Point tangent;
double length = 0;
path.GetPointAtFractionLength(0, out previousPointOnPath, out tangent);
for (double progress = (1 / steps); progress < 1; progress += (1 / steps))
{
path.GetPointAtFractionLength(progress, out pointOnPath, out tangent);
length += Distance(previousPointOnPath, pointOnPath);
previousPointOnPath = pointOnPath;
}
path.GetPointAtFractionLength(1, out pointOnPath, out tangent);
length += Distance(previousPointOnPath, pointOnPath);
return length;
}
public static double Distance(Point p0, Point p1)
{
return Math.Sqrt((Math.Pow((p1.X - p0.X),2) + Math.Pow((p1.Y - p0.Y),2)));
}
为了更快地进行近似,请调用 GetFlattenedPathGeometry,它将您的路径转换为一系列直线,并将直线长度相加。
这与您现有的代码几乎做同样的事情,除了它更智能地选择线段(例如,贝塞尔曲线分割成的线段数量取决于曲率),因此您的线段数量将少几个数量级。相同的精度。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)