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) 是您创建数组时初始化数组的值。
在我的代码中,我创建了一个 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) 是您创建数组时初始化数组的值。