我正在尝试使用 PathIterator 来计算任何 Shape 对象的中心,以便可以计算弯曲路径,但是在找到标准 1x1 矩形的中心后,我的 getCenter() 方法会返回该点:
Point2D.Double[0.3333333333333333, 0.3333333333333333]
我的 getCenter() 方法:
shape = new Rectangle2D.Double(0, 0, 1, 1);
public Point2D.Double getCenter()
{
ArrayList<Point2D.Double> points = new ArrayList<Point2D.Double>();
double[] arr = new double[6];
for(PathIterator pi = shape.getPathIterator(null); !pi.isDone(); pi.next())
{
pi.currentSegment(arr);
points.add(new Point2D.Double(arr[0], arr[1]));
}
double cX = 0;
double cY = 0;
for(Point2D.Double p : points)
{
cX += p.x;
cY += p.y;
}
System.out.println(points.toString());
return new Point2D.Double(cX / points.size(), cY / points.size());
}
我发现在打印 points.toString() 时,我在控制台中得到了这个:
[Point2D.Double[0.0, 0.0], Point2D.Double[1.0, 0.0], Point2D.Double[1.0, 1.0], Point2D.Double[0.0, 1.0], Point2D.Double[0.0, 0.0], Point2D.Double[0.0, 0.0]]
我注意到点数组中有六个条目,而不是我期望的四个,因为输入的 Shape 对象是 Rectangle2D.Double(0, 0, 1, 1)。显然,它对点 (0, 0) 的解释比我想要的多两倍,我对为什么会这样感到困惑。它是 PathIterator.isDone() 方法的结果吗?我使用不正确吗?如果 PathIterator 不能解决我的问题怎么办?