本文介绍了使用 PathIterator 返回限制区域的所有线段?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
在 Java 中,如何使用 PathIterator
遍历约束 区域
?Area
仅由线约束(但曲线支持不会受到影响).
In Java, how would one employ PathIterator
to iterate through the line segments that constrain an Area
? The Area
is bound only by lines (but curve support wouldn't hurt).
该方法应该返回所有线段的集合.
The method should return a collection of all the line segments.
推荐答案
这有效(我相信在所有情况下),但它可能需要更彻底的测试:
This works (in all situations, I believe), but it might require more thorough testing:
Area area; // The value is set elsewhere in the code
ArrayList<double[]> areaPoints = new ArrayList<double[]>();
ArrayList<Line2D.Double> areaSegments = new ArrayList<Line2D.Double>();
double[] coords = new double[6];
for (PathIterator pi = area.getPathIterator(null); !pi.isDone(); pi.next()) {
// The type will be SEG_LINETO, SEG_MOVETO, or SEG_CLOSE
// Because the Area is composed of straight lines
int type = pi.currentSegment(coords);
// We record a double array of {segment type, x coord, y coord}
double[] pathIteratorCoords = {type, coords[0], coords[1]};
areaPoints.add(pathIteratorCoords);
}
double[] start = new double[3]; // To record where each polygon starts
for (int i = 0; i < areaPoints.size(); i++) {
// If we're not on the last point, return a line from this point to the next
double[] currentElement = areaPoints.get(i);
// We need a default value in case we've reached the end of the ArrayList
double[] nextElement = {-1, -1, -1};
if (i < areaPoints.size() - 1) {
nextElement = areaPoints.get(i + 1);
}
// Make the lines
if (currentElement[0] == PathIterator.SEG_MOVETO) {
start = currentElement; // Record where the polygon started to close it later
}
if (nextElement[0] == PathIterator.SEG_LINETO) {
areaSegments.add(
new Line2D.Double(
currentElement[1], currentElement[2],
nextElement[1], nextElement[2]
)
);
} else if (nextElement[0] == PathIterator.SEG_CLOSE) {
areaSegments.add(
new Line2D.Double(
currentElement[1], currentElement[2],
start[1], start[2]
)
);
}
}
// areaSegments now contains all the line segments
这篇关于使用 PathIterator 返回限制区域的所有线段?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!