📄 form1.cs
字号:
goto loop;
}
goto exit;
loop:
g.DrawLine(p1,x+40,y,x+32,y+4);
g.DrawLine(p1,x+32,y+4,x+20,y+3);
g.DrawLine(p1,x+20,y+3,x+22,y+4);
g.DrawLine(p1,x+22,y+4,x+12,y+5);
g.DrawLine(p1,x+12,y+5,x+16,y+6);
g.DrawLine(p1,x+16,y+6,x+8,y+9);
g.DrawLine(p1,x+8,y+9,x+8,y+12);
g.DrawLine(p1,x+8,y+12,x+6,y+13);
g.DrawLine(p1,x+6,y+13,x+16,y+12);
g.DrawLine(p1,x+16,y+12,x+18,y+13);
g.DrawLine(p1,x+18,y+13,x+20,y+10);
g.DrawLine(p1,x+20,y+10,x+24,y+11);
g.DrawLine(p1,x+24,y+11,x+26,y+8);
g.DrawLine(p1,x+26,y+8,x+30,y+9);
g.DrawLine(p1,x+30,y+9,x+32,y+4);
g.DrawLine(p1,x+29,y+5,x+20,y+7);
g.DrawLine(p1,x+20,y+7,x+7,y+13);
return;
exit: ;
}
private void menuItem7_Click(object sender, System.EventArgs e)
{
status=true;
//编程思路:
//(1)利用三角函数表达式作一条曲线
//(2)将曲线进行种几何变换,生成图案
//(3)将表达式中的多个参数取随机数
//(4)利用循环结构往复生成千百万化的图案
Graphics g=pictureBox1.CreateGraphics();
Pen pen1=new Pen(Color.Blue);
g.Clear(pictureBox1.BackColor);
double pi,ss,a,ed,d,sf,st,bt1,bt2,al,x1,y1,bt,be,y,x,xy;
int un,p0,uv,st2,el1,hf2,k,t,hf1,dy,dx,m,px,py;
int j,cx,cy,s,gg,l,z,i,bx,by,ss1,ss2;
double[] x3=new double[2000];
double[] y3=new double[2000];
double[] pt=new double[2000];
pi=3.14159;
Random ran=new Random();
ss1=ran.Next(8)+1;
ss2=ran.Next(4)+1;
un=ss1;
uv=360/un;k=uv/2;hf1=180-uv;hf2=180-k;ss=uv/100.0;
p0=ss2;
if(p0==4)
{
bx=hf2;
by=hf1;
}
else
{
bx=hf1;
by=hf2;
}
el1=ss2;
if(el1==5)
st2=50;
else
st2=2;
be=45.0;
if(be==45.0)
be=pi/4;
ed=3*pi/8;
st=pi/8;
gg=1;
a=ss2/4+1;
d=ss2/4.0+1.0;
if(d<2)
st2=4;
else
gg=-1;
sf=1.0;
i=0;
m=0;
for(bt=be;bt<=be+ed;bt+=st)
{
bt1=Math.Cos(bt);
bt2=Math.Sin(bt);
for(s=1;s<=2;s++)
{
for(l=-1;l<=gg;l+=2)
{
for(z=-50;z<=50;z+=st2)
{
i++;
x=z;
al=(z+50)*2*pi/100;
if(el1<3)
{
y=l*a*25*Math.Cos(al)*Math.Sin(d*al);
}
else
{
y=l*a*25*Math.Sin(al)*Math.Cos(d*al);
}
if(s==2)
{
xy=x;x=y;y=xy;
}
x1=x*bt1-y*bt2;
y1=x*bt2+y*bt1;
x3[i]=(x1*sf);
y3[i]=(y1*sf);
if(z==-50)
{
m++;
pt[m]=i;
}
}
}
for(cx=-bx;cx<=bx;cx+=uv)
{
for(cy=-by;cy<=by;cy+=uv)
{
t=1;
for(j=1;j<=i;j++)
{
px=(int)(cx+x3[j]*ss);
py=(int)(cy+y3[j]*ss);
dx=(int)(200+px);
dy=(int)(180-py);
if(j==pt[t])
{
p1.X=dx;
p1.Y=dy;
t++;
}
else
{
p2.X=dx;
p2.Y=dy;
g.DrawLine(pen1,p1,p2);
p1=p2;
}
}
}
}
}
}
}
private void menuItem9_Click(object sender, System.EventArgs e)
{
status=true;
//编程思路:
//平均值为m、标准偏差为sd=1的规范化随机数Z,在取间[0,1]内取12个相同的伪随机数x1,x2,x3...,x12生成下式:
// Z=sd(x1+x2+x3+...+x12-6)+m
//本例程序中,平均值m=0,标准偏差sd=1,生成1000个随机数,用直方图在屏幕上显示并标出理论曲线。
int i,n=29;
double z,k=0.5;
int j,nn=0,max=0;
double[] w=new double[30];
double[] f=new double[30];
double floor1;
Random r1=new Random();
for(i=1;i<=n;i++)
{
floor1=10.0*(0.2*i-2.89);
if(floor1>(int)floor1)
{
floor1=(int)floor1;
}
else
{
floor1=(int)floor1-1;
}
f[i]=floor1/10.0;
w[i]=0;
}
for(j=1;j<=1000;j++)
{
double x1=0.0;
for(i=1;i<=12;i++)
{
x1+=r1.Next(32767)/32768.0;
}
z=x1-6.0;
for(i=1;i<=n;i++)
{
if(z>f[29])z=f[29];
if(z<=f[i])break;
}
w[i]+=1;
}
for(i=1;i<=n;i++)
{
nn+=(int)w[i];
}
for(i=1;i<=n;i++)
{
if(w[i]>=max)
max=(int)w[i];
}
int dx=9,xx=70,x0=200,y0=350;
double x,y;
int width,height;
Graphics g1=pictureBox1.CreateGraphics();
Pen pen1=new Pen(Color.Blue);
g1.Clear(pictureBox1.BackColor);
g1.DrawLine(pen1,(int)((x0-xx)*k),(int)(y0*k),(int)((x0+xx)*k),(int)(y0*k));
Pen pen2=new Pen(Color.Green);
for(i=1;i<=n;i++)
{
width=(int)(((xx+dx)*k)-(xx*k));
height=(int)((y0*k)-((y0-w[i])*k));
g1.DrawRectangle(pen2,(int)(xx*k),(int)((y0-w[i])*k),(int)width,(int)height);
xx+=dx;
}
int px,py;
Pen pen3=new Pen(Color.Red);
for(x=-2.9;x<=2.9;x+=0.01)
{
y=200.0/Math.Sqrt(2*3.14)*Math.Exp(-x*x/2.0);
px=(int)(((130/2.9)*x+x0)*k);
py=(int)((y0-y)*k);
if(x==-2.9)
{
p1.X=px;
p1.Y=py;
}
else
{
p2.X=px;
p2.Y=py;
g1.DrawLine(pen3,p1,p2);
p1=p2;
}
}
}
private void menuItem10_Click(object sender, System.EventArgs e)
{
status=true;
//编程思路:
//根据麦克斯韦——玻耳兹曼速度分布定律,气体分子的相对速度
//在x~x+dx的概率dω为:
//dω=f(x)dx=(4/sqrt(π))*x*x*exp(-x*x)dx
//式中,x是相对速度,为分子实际速度v和最大概率速度vm之比,即
// x=v/vm
int i,n=20;
int[] w=new int[30];
double k=0.5;
int j,nn=0,max=0;
double[] f=new double[30];
double xi,yi,z;
Random r1=new Random();
for(i=1;i<=n;i++)
{
f[i]=0.2*i;
w[i]=0;
}
for(j=1;j<=1000;j++)
{
do
{
xi=4.0*(r1.Next(32767)/32768.0);
yi=0.85*(r1.Next(32767)/32768.0);
}while(((4.0/Math.Sqrt(3.1415))*xi*xi*Math.Exp(-xi*xi))<yi);
z=xi;
for(i=1;i<=n;i++)
{
if(z<=f[i])break;
}
w[i]+=1;
}
for(i=1;i<=n;i++)
{
nn+=w[i];
}
for(i=1;i<=n;i++)
{
if(w[i]>=max)max=w[i];
}
int x0=100,y0=300,xx=0,dx=20;
double s=1.0;
double x1,y1;
double width,height;
Graphics g1=pictureBox1.CreateGraphics();
Pen pen1=new Pen(Color.Blue);
pictureBox1.Refresh();
g1.DrawLine(pen1,(int)(x0*k),(int)(y0*k),(int)((x0+200)*k),(int)(y0*k));
g1.DrawLine(pen1,(int)(x0*k),(int)(y0*k),(int)(x0*k),(int)((y0-200)*k));
Pen pen2=new Pen(Color.Green);
for(i=1;i<=n;i++)
{
width=(((x0+xx+dx)*k)-((x0+xx)*k));
height=(y0*k)-((y0-s*w[i])*k);
g1.DrawRectangle(pen1,(int)((x0+xx)*k),(int)((y0-s*w[i])*k),(int)width,(int)height);
xx+=dx;
}
int px,py;
Pen pen3=new Pen(Color.Red);
for(x1=0;x1<=3.5;x1+=0.01)
{
y1=(4.0/Math.Sqrt(3.1415))*x1*x1*Math.Exp(-x1*x1);
px=(int)((x0+(20*dx/4)*x1)*k);
py=(int)((y0-200*y1)*k);
if(x1==0)
{
p1.X=px;
p1.Y=py;
}
else
{
p2.X=px;
p2.Y=py;
g1.DrawLine(pen3,p1,p2);
p1=p2;
}
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -