随机连接
编写一段Java程序,从命令行接受一个整数N和double p(0到1之间)作为参数,在一个圆上画出大小为0.05且间距相等的N个点,然后将每对点按照概率p用灰线连接。
import edu.princeton.cs.algs4.StdDraw;
import edu.princeton.cs.algs4.StdRandom;
这是引入包,首先我们需要导入两个库:
1.下载stdlib.jar和algs4.jar包
下载连接
2.将stdlib.jar和algs4.jar导入到Eclipse中
右键你的工程目录,最后一项属性Properties,第三项Java Build Path,右边选项卡第三项Libraries,然后Add JARS
那就选第二个Add External JARS,然后找到下载的两个包添加进去,应该就行了
1.画出一个圆
//此处为画圆操作
public static void drawcircle(double x,double y,double r,int N, double[][] a)
{
StdDraw.setXscale(0,x*2);//X轴的范围
StdDraw.setYscale(0,y*2);//Y轴的范围
StdDraw.setPenColor(StdDraw.RED);
StdDraw.circle(50,50,50);//画圆
for(int i=0;i<N;i++)
{
StdDraw.setPenRadius(0.05);
StdDraw.setPenColor(StdDraw.BLACK);
double m=50-50*Math.cos(2*Math.PI*i/N);
double n=50+50*Math.sin(2*Math.PI*i/N);
StdDraw.point(m,n);//画点
a[i][0]=m;//记录点的X位置
a[i][1]=n;//记录点的Y位置
StdDraw.setPenColor(StdDraw.RED);
}
}
2.随机画线
//此处为随机连线操作
public static void Randomline(double x,double y,double[][] a,double p)
{
StdDraw.setXscale(0,x*2);
StdDraw.setYscale(0,y*2);
StdDraw.setPenRadius(0.01);
StdDraw.setPenColor(StdDraw.LIGHT_GRAY);
int N=a.length;
for(int i=0;i<N;i++)
for(int j=0;j<N;j++)
{
if(StdRandom.bernoulli(p))
StdDraw.line(a[i][0], a[i][1], a[j][0], a[j][1]);
}
}
3.完整代码
package test;
import java.util.Scanner;
import edu.princeton.cs.algs4.StdDraw;
import edu.princeton.cs.algs4.StdRandom;
public class RandomAccess {
@SuppressWarnings("resource")
public static void main(String[] args)
{
double x=50;
double y=50;
double r=50;
Scanner In=new Scanner(System.in);
int N=In.nextInt();
double p=In.nextDouble();
double [][] a=new double[N][2];
drawcircle(x,y,r,N,a);
Randomline(x,y,a,p);
}
//此处为画圆操作
public static void drawcircle(double x,double y,double r,int N, double[][] a)
{
StdDraw.setXscale(0,x*2);
StdDraw.setYscale(0,y*2);
StdDraw.setPenColor(StdDraw.RED);
StdDraw.circle(50,50,50);
for(int i=0;i<N;i++)
{
StdDraw.setPenRadius(0.05);
StdDraw.setPenColor(StdDraw.BLACK);
double m=50-50*Math.cos(2*Math.PI*i/N);
double n=50+50*Math.sin(2*Math.PI*i/N);
StdDraw.point(m,n);
a[i][0]=m;
a[i][1]=n;
StdDraw.setPenColor(StdDraw.RED);
}
}
//此处为随机连线操作
public static void Randomline(double x,double y,double[][] a,double p)
{
StdDraw.setXscale(0,x*2);
StdDraw.setYscale(0,y*2);
StdDraw.setPenRadius(0.01);
StdDraw.setPenColor(StdDraw.LIGHT_GRAY);
int N=a.length;
for(int i=0;i<N;i++)
for(int j=0;j<N;j++)
{
if(StdRandom.bernoulli(p))
StdDraw.line(a[i][0], a[i][1], a[j][0], a[j][1]);
}
}
}
最后,运行程序,输入:
10
0.12
结果为: