如何从ArrayList中的一个Point到ArrayList中另一个最近的其他Point绘制一条线

时间:2015-02-26 03:02:54

标签: java arraylist line draw

这是我的Lab类,它包含一个名为findNearest()的方法,它将一个Point对象作为参数,并将Points的ArrayList作为参数,并将列表中最近的Point返回给单个Point。 在我的main方法中,我创建了一个包含10个随机Point对象的ArrayList。在StdDraw画布上的点上绘制。

我想连接最接近ArrayList中另一个点的点,但我不知道怎么......任何人都可以帮助我吗?

import java.util.ArrayList;

public class Lab {
    public static void main(String[] args){

        //Create 10 random points and put them in a List
        ArrayList<Point> thePoints = new ArrayList<Point>();
        for(int i=0; i<10; i++){
            Point p = new Point(600 * Math.random(), 600 * Math.random());
            thePoints.add(p);
        }
        StdDraw.setCanvasSize(600,600);
        StdDraw.setXscale(0.0 , 600.0);
        StdDraw.setYscale(0.0 , 600.0);

        //Draw the points in the List
        for( Point p : thePoints){
            p.draw();
        }

        //Draw lines to the nearestNeighbors

        StdDraw.show();

    }
    public static Point findNearest(Point aPoint, ArrayList<Point> theList){
             double minimumDistSoFar = Double.MAX_VALUE;
                Point nearest = null;

                for (Point p : theList) {
                    if (p.getMyX() == minimumDistSoFar && p.getMyY() == minimumDistSoFar) {
                    }

                    double pDistance = distance(p);
                    if (pDistance < minimumDistSoFar) {
                        minimumDistSoFar = pDistance;
                        nearest = p;
                   }
                }

            return nearest; 
    }
}

1 个答案:

答案 0 :(得分:0)

StdDraw有一个line()方法。以下是文档的链接:Documentation

此方法需要四行的两倍,行的起点x和y,以及行尾的x和y。您可以从Point的x和y之一开始绘制一条线,然后将线的末端的x和y设置为最接近的Point的x和y。

我想你可以这样做:

for(Point p : thePoints)
{
    Point p2 = findNearest(p, thePoints);
    StdDraw.line(p.getX(), p.getY(), p2.getX(), p2.getY());
}

根据我的理解,这应该从循环中的点到最近的点绘制一条线。