⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 form1.cs

📁 这是《C#图形程序设计》这本书的源代码
💻 CS
📖 第 1 页 / 共 2 页
字号:
				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 + -