Exercise1_1_31

来源:互联网 发布:手机淘宝举报有用吗 编辑:程序博客网 时间:2024/05/19 14:56
package chapterone;import java.awt.Color;import java.util.Scanner;import com.algs4.stdlib.StdDraw;import com.algs4.stdlib.StdRandom;public class Exercise1_1_31 {    public static void drawRandConn(int N, double p) {        StdDraw.setCanvasSize(500, 500);// 设置画布大小,顺序不能和下面的语句交换。        StdDraw.setScale(-1.0, 1.0);// 设置x和y 轴的范围        StdDraw.setPenRadius(.015);// 设置画笔的大小        double[][] d = new double[N][2];        for (int i = 0; i < N; i++) {// 获取每一个点的坐标, 核心代码            d[i][0] = Math.cos(2 * Math.PI * i / N);// x坐标            d[i][1] = Math.sin(2 * Math.PI * i / N);// y坐标            /***             * 一个数的cos和sin值的范围为-1到1,这就决定了上面的x,y轴的范围。             * 又因为同一个数的sin的平方,和cos的平方相加的和为1, 所以,(x,y)肯定在以(0,0)为圆心,半径为1的圆上。             */            // 输出各点坐标            String xx = String.format("%.2f", 2 * Math.PI * i / N);            String yy = String.format("%.2f", 2 * Math.PI * i / N);            String x = String.format("%.2f", d[i][0]);            String y = String.format("%.2f", d[i][1]);            System.out.println(i + 1 + ":  " + xx + ",   " + yy + "     " + x                    + ",   " + y);            /***             * 坐标输出结果如下: 1: 0.00, 0.00 1.00, 0.00 2: 0.42, 0.42 0.91, 0.41 3:             * 0.84, 0.84 0.67, 0.74 4: 1.26, 1.26 0.31, 0.95 5: 1.68, 1.68             * -0.10, 0.99 6:2.09, 2.09 -0.50, 0.87 7: 2.51, 2.51 -0.81, 0.59 8:             * 2.93, 2.93 -0.98, 0.21 9: 3.35, 3.35 -0.98, -0.21 10: 3.77, 3.77             * -0.81,-0.59 11: 4.19, 4.19 -0.50, -0.87 12: 4.61, 4.61 -0.10,             * -0.99 13:5.03, 5.03 0.31, -0.95 14: 5.45, 5.45 0.67, -0.74 15:             * 5.86, 5.86 0.91, -0.41             *              * 由此可知代码d[i][0] = Math.cos(2 * Math.PI * i/N);             *              * 中除以N的用途:平分0~N之间的数。             */            StdDraw.point(d[i][0], d[i][1]);// 在指定的坐标处画一个点        }        StdDraw.setPenRadius();// 画笔半径默认值为0.002        for (int i = 0; i < N - 1; i++)            for (int j = i + 1; j < N; j++)                if (StdRandom.bernoulli(p))// 概率判断                    /***                     * boolean bernoull(double p){ return uniform()<p; }                     *                      *  double uniform(){ return random.nextDouble(); }                     */                    StdDraw.line(d[i][0], d[i][1], d[j][0], d[j][1]);        // 坐标判断        StdDraw.setPenRadius(0.05);        StdDraw.setPenColor(Color.RED);        StdDraw.point(-1, 0);        StdDraw.setPenColor(Color.BLUE);        StdDraw.point(1, 0);        StdDraw.setPenColor(Color.green);        StdDraw.point(0.91, 0.41);    }    public static void main(String[] args) {        Scanner scan = new Scanner(System.in);        // int N = scan.nextInt();        int N = 15;        // double p = scan.nextDouble();        double p = 1;        p = Math.max(0, Math.min(1, p));// 值得学习的写法        drawRandConn(N, p);        scan.close();    }}
0 0
原创粉丝点击