迭代java中一行/路径上的每个点

sca*_*ity 4 java iterator point path line

我是新手使用迭代器,并想知道如何迭代线段上的每个点(Line2D.Double,确切地说) - 我需要检查线上的每个点是否满足某些要求.

另外,给定一个路径对象(如GeneralPath),你将如何做同样的事情(遍历形状轮廓上的每个点)?

理想情况下,我喜欢这样的东西(有一条线或一条路径):

Line2D line = new Line2D.Double(p1,p2);
for (Point2D point : line)
{
   point.callSomeMethod();
}
Run Code Online (Sandbox Code Playgroud)

nes*_*983 8

Java API中似乎没有任何东西可以让Bresenham的算法用户可见.所以我写了一个迭代一行的类.

你可以像这样使用它:

List<Point2D> points = new ArrayList<Point2D>();
Line2D line = new Line2D.Double(0, 0, 8, 4);
Point2D current;

for (Iterator<Point2D> it = new LineIterator(line); it.hasNext();) {
    current = it.next();
    points.add(current);
}

assertThat(points.toString(), 
    is("[Point2D.Double[0.0, 0.0], Point2D.Double[1.0, 0.0], " +
        "Point2D.Double[2.0, 1.0], Point2D.Double[3.0, 1.0], " +
        "Point2D.Double[4.0, 2.0], Point2D.Double[5.0, 2.0], " +
        "Point2D.Double[6.0, 3.0], Point2D.Double[7.0, 3.0], " +
        "Point2D.Double[8.0, 4.0]]"));
Run Code Online (Sandbox Code Playgroud)