随机连接

题目描述:

编写一段程序,从命令行接收一个整数N和double值p(0到1之间)作为参数,在一个圆上画出大小为0.01且间距相等的N个点,然后将每对点按照概率p用灰线连接。


代码实现:

import edu.princeton.cs.algs4.*;

public class fly {
	public static void paint(int N, double p) {
		if (p > 1 || p < 0)
			StdOut.println("p值应介于0、1间");
		// 存储N个点的x,y坐标,为根据概率连线做准备
		double[] xa = new double[N];
		double[] ya = new double[N];
		// 设置圆的半径为30
		int r = 30;
		// 画点前的准备(不设置x,y的范围比例无法DrawPoint)
		StdDraw.setPenRadius(0.01);
		StdDraw.setXscale(0, 80);
		StdDraw.setYscale(0, 80);
		// 角度转化为弧度
		double angle = Math.toRadians(360 / N);
		double start = 0.0;
		for (int i = 0; i < N; i++) {
			// 圆点圆心为(40,40)
			double x = 40 + r * Math.cos(start);
			double y = 40 + r * Math.sin(start);
			xa[i] = x;
			ya[i] = y;
			StdDraw.point(x, y);
			start += angle;
		}
		StdDraw.setPenColor(StdDraw.GRAY);
		for (int i = 0; i < N - 1; i++)
			for (int j = i + 1; j < N; j++) {
				if (StdRandom.uniform(0.0, 1.0) <= p)
					StdDraw.line(xa[i], ya[i], xa[j], ya[j]);
			}
	}

	public static void main(String[] args) {
		paint(StdIn.readInt(), StdIn.readDouble());
	}
}


输入参数10,0.3测试:



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值