这是我的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;
}
}
答案 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());
}
根据我的理解,这应该从循环中的点到最近的点绘制一条线。