算法1.2.1Point2D



//在单位正方形中生成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


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值