java.awt.Rectangle 的 PathIterator 总是给出 (0,0)

PathIterator for java.awt.Rectangle always gives (0,0)

在我的代码中,我创建了一个 java.awt.Rectangle 的实例,其中包含一个角以及长度和宽度 。然后我对其应用旋转仿射变换(at),将其旋转一定角度。

然后我获取矩形的 PathIterator 并将几何体迭代为:

PathIterator i = rectangle.getPathIterator(at);
while (!i.isDone()) {
    double[] xy = new double[2];
    i.currentSegment(xy);
}

虽然我希望得到 4 分(或 5 分,因为第一个和最后一个可能相同),但我得到的是 6 分。更令人惊讶的是,最后一点总是 (0,0)。 (0,0) 不是矩形几何的一部分,但我仍然总是明白。 这种行为背后的原因是什么?

检查 currentSegment 的 return 值。最后一个 "point" 将是 PathIterator.SEG_CLOSE 类型,记录为:

The segment type constant that specifies that the preceding subpath should be closed by appending a line segment back to the point corresponding to the most recent SEG_MOVETO.

与此类型关联的点数据是隐式的(即路径中的第一个点和最后一个点)。当 currentSegment returns SEG_MOVETO 时,没有任何内容写入数组;您在上次调用中看到的点 (0, 0) 是您创建数组时初始化数组的值。