//在单位正方形中生成N个随机点,然后计算两个点之间的最近距离
//不用重新画正方形,在画板上画
//java当中有Point2D这个类可以使用
import edu.princeton.cs.algs4.StdIn;
import edu.princeton.cs.algs4.StdDraw;
import edu.princeton.cs.algs4.StdRandom;
import edu.princeton.cs.algs4.Point2D;
public class Point2Dproject {
public static void main(String[] args) {
int N=StdIn.readInt();//不可分行写,要写成单行。
//先把点画出来,随机分布
Point2D []point=new Point2D[N];//把点都放进数组当中
for(int i=0;i<N;i++)
point[i]=new Point2D(StdRandom.uniform(), StdRandom.uniform());
StdDraw.setPenColor(StdDraw.BLACK);
StdDraw.setPenRadius(0.006);
for (int i = 0; i < N; i++)
{
point[i].draw(); //使用的是官网的Point.draw();
可参考:https://algs4.cs.princeton.edu/12oop/Point2D.java.html
}
double minDistance = (point[0].x() - point[N-1].x()) * (point[0].x() - point[N-1].x())
+ (point[0].y() - point[N-1].y()) * (point[0].y() - point[N-1].y());
int minIndex = N;
for (int i = 0; i < N - 1; i ++)
{
double dis = (point[i].x() - point[i+1].x()) * (point[i].x() - point[i+1].x())
+ (point[i].y() - point[i+1].y()) * (point[i].y() - point[i+1].y());
if (minDistance > dis)
{
minDistance = dis;
minIndex = i;
}
}
System.out.println(Math.sqrt(minDistance));
StdDraw.setPenColor(StdDraw.RED);
StdDraw.setPenRadius(0.002);
if (minIndex == N) //如果输入只有两个数的话
{
StdDraw.line(point[N-1].x(), point[N-1].y(), point[0].x(), point[0].y());
}
else
{
StdDraw.line(point[minIndex].x(), point[minIndex].y(),
point[minIndex+1].x(), point[minIndex+1].y());
}
}
}
借鉴的https://blog.csdn.net/furzoom/article/details/52669766