算法1.2.1Point2D

本文介绍了一个Java程序,该程序能够在单位正方形内生成指定数量的随机点,并计算这些点之间的最小距离。程序使用了Princeton提供的Point2D类来绘制点并计算距离。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >



//在单位正方形中生成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.youkuaiyun.com/furzoom/article/details/52669766


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值