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

📄 form1.cs

📁 这是《C#图形程序设计》这本书的源代码
💻 CS
📖 第 1 页 / 共 3 页
字号:
			{
				for(x0=0;x0<=620;x0++)
				{
					y0=x0*Math.Tan(th)-(gg*Math.Pow(x0,2))/(2*Math.Pow(v,2)*Math.Pow(Math.Cos(th),2));
					x=x0-250;
					y=y0-120;
					if((x>-320)&&(x<320)&&(y>-126)&&(y<200))
					{
						gx=(int)(cx+x);
						gy=(int)(cy-y);
						if(flag==0)
						{
							p1.X=gx;p1.Y=gy;flag=1;
						}
						else
						{
							p2.X=gx;p2.Y=gy;
							g.DrawLine(pen1,p1,p2);
							p1=p2;
						}
					}
				}
			}
		}

		private void menuItem6_Click(object sender, System.EventArgs e)
		{
			//变成思路:
			//将3阶函数曲线y=a*x*(x-x0)(x+x0)的曲线进行排列组成的图案。当y=0时,
			//此函数有3个解:x=0,x=x0,x=-x0。因而,曲线在(0,0),(x0,0),(-x0,0)3点与x轴相交。
			//如果设右上角曲线顶点坐标为(x1,y1),代入后得:
			//					y1=a*x1*(x0+x1)(x1-x0)
			//可求得a为:
			//					a=y1/(x1*(x0+x1)(x1-x0))
			Graphics g=this.CreateGraphics();
			Pen pen1=new Pen(Color.Black);
			g.Clear(this.BackColor);

			int j,px,py,x;
			double a,x0,x1,y1,y;
			x=p1.X;y=p1.Y;
			x=p2.X;y=p2.Y;
			x0=120;
			x1=180;
			y1=100;
			a=y1/(x1*(x1-x0)*(x1+x0));
			for(j=-50;j<=50;j+=5)
				for(x=-180;x<=180;x+=2)
				{
					y=(a*x*(x-x0)*(x+x0));
					px=(int)(140+x+j);
					py=(int)(160-y);
					if(x==-180)
					{
						p1.X=px+100;p1.Y=py;
					}
					else
					{
						p2.X=px+100;p2.Y=py;
						g.DrawLine(pen1,p1,p2);
						p1=p2;
					}
				}
		}

		private void menuItem7_Click(object sender, System.EventArgs e)
		{
			//5阶函数曲线与3阶函数曲线相似,她与x轴有5个交点,分别为-x0,-x2,原点,x2,x0,函数表达式可
			//写为:
			//	y=(a*x*(x-x0)*(x+x0)*(x-x2)*(x+x2));
			Graphics g=this.CreateGraphics();
			Pen pen1=new Pen(Color.Black);
			g.Clear(this.BackColor);

			int j,px,py,x;
			double a,x0,x1,y1,x2,y;
			x=p1.X;y=p1.Y;
			x=p2.X;y=p2.Y;
			x0=160;
			x1=180;
			y1=180;
			x2=80;
			a=y1/(x1*(x1-x0)*(x1+x0)*(x1-x2)*(x1+x2));
			for(j=-50;j<=50;j+=5)
				for(x=-180;x<=180;x+=2)
				{
					y=(a*x*(x-x0)*(x+x0)*(x-x2)*(x+x2));
					px=(int)(140+x+j);
					py=(int)(160-y);
					if(x==-180)
					{
						p1.X=px+100;p1.Y=py;
					}
					else
					{
						p2.X=px+100;p2.Y=py;
						g.DrawLine(pen1,p1,p2);
						p1=p2;
					}
				}
		}

		private void menuItem8_Click(object sender, System.EventArgs e)
		{
			//编程思想:
			//将半径r=常数(例如 r=100)的圆周等分为n等份,以等分点为圆心,
			//以等分点距AB的垂线距离(H)为半径画圆,则可画出Nephroid曲线
			//图形。
			Graphics g=this.CreateGraphics();
			Pen pen1=new Pen(Color.Black);
			g.Clear(this.BackColor);
			const double PI=3.14159;
			int n;
			double r,rr,theta,x,y;
			r=60;
			n=40;
			for(theta=0.001;theta<=2*PI;theta+=PI/n)
			{
				x=r*Math.Cos(theta)/20;
				y=r*Math.Sin(theta);
				rr=Math.Sqrt(y*y);
				x=x+220;
				y=140-y;
				g.DrawEllipse(pen1,(int)(x)-(int)(rr),(int)(y)-(int)(rr),2*(int)(rr),2*(int)(rr));
			}
		}

		private void menuItem9_Click(object sender, System.EventArgs e)
		{
			//将半径取为定长的圆周等分为n等份,以等分点P为圆心,以等分点
			//到定点A的距离PA为半径画圆,所得曲线称为卡基奥依特(Cardioid)曲线。
			//计算公式如下:
			//第i个等分点Pi的x、y坐标:
			//xi=r*cos(i*2π/n)
			//yi=r*sin(i*2π/n)
			//等分点Pi到定点A的距离:
			//Pi=sqrt(((xi-r)*(xi-r)+yi*yi))
			Graphics g=this.CreateGraphics();
			Pen pen1=new Pen(Color.Black);
			g.Clear(this.BackColor);
			const double PI=3.14159;
			int i,n;
			double r,rr,theta,x,y;
			r=50;
			n=40;
			theta=2*PI/n;
			for(i=0;i<=n;i+=1)
			{
				x=12*r*Math.Cos(i*theta)/20;
				y=r*Math.Sin(i*theta);
				rr=Math.Sqrt((x-r)*(x-r)+y*y);
				x=x+220;
				y=140-y;
				g.DrawEllipse(pen1,(int)(x)-(int)(rr),(int)(y)-(int)(rr),2*(int)(rr),2*(int)(rr));
			}
		}

		private void menuItem11_Click(object sender, System.EventArgs e)
		{
			//编程思想:
			//李沙育曲线的参数数学表达式如下:
			//x=r*sin(a*θ)
			//y=r*sin(b*θ)
			//表示在x轴方向和y轴方向振幅不变、但周期不同的振子运动的点的轨迹。
			//式中参数r表示振幅,a、b取不同整数值,当a=b时画一条斜线。
			Graphics g=this.CreateGraphics();
			Pen pen1=new Pen(Color.Black);
			g.Clear(this.BackColor);
			
			int a,b,px,py;
			double x,y,k,w,h,flag,cx,cy,PI,th;
			PI=3.14159;
			a=6;b=7;
			w=320;h=240;
			cx=160;cy=120;
			flag=0;k=200;
			for(th=0;th<=2*PI+0.01;th+=PI/k)
			{
				x=w*0.4*Math.Sin(a*th);
				y=h*0.4*Math.Sin(b*th);
				px=(int)(cx+x);
				py=(int)(cy+y);
				if(flag==0)
				{
					p1.X=px;p1.Y=py;flag=1;
				}
				else
				{
					p2.X=px;p2.Y=py;
					g.DrawLine(pen1,p1,p2);
					p1=p2;
				}
			}
			//说明:
			//本程序中使用公式:
			//x=w*0.4*Math.Sin(a*th);
			//y=h*0.4*Math.Sin(b*th);
			//描绘图形。
		}

		private void menuItem12_Click(object sender, System.EventArgs e)
		{
			Graphics g=this.CreateGraphics();
			Pen pen1=new Pen(Color.Black);
			g.Clear(this.BackColor);
			const double PI=3.1416;
			int x,y,i,n,px,py,bx,by;
			double a;
			i=0;
			n=0;
			for(px=70;px<=370;px+=60)
			{
				i=i+1;
				for(py=40;py<=250;py+=60)
				{
					if(n==6)
					{
						n=1;
					}
					else 
					{
						n=n+1;
					}
					for(a=0;a<=2*PI;a+=PI/(20+n))
					{
						x=(int)(px+28.0*Math.Sin(n*a));
						y=(int)(py-28.0*Math.Sin(i*a));
						if(a==0)
						{
							p1.X=x;p1.Y=y;bx=x;by=y;
						}
						else
						{
							p2.X=x;p2.Y=y;
							g.DrawLine(pen1,p1,p2);
							p1=p2;
						}
					}
				}
			}
			//说明:
			//本程序中使用
			//x=(int)(px+28.0*Math.Sin(n*a));
			//y=(int)(py-28.0*Math.Sin(i*a));
			//(0<a<2π)
			//并且依从左到右i=1,2,3,...,6,从上到下n=1,2,...,6的规律配置图形。
			//图中从左上到右下的图形(i=n)似乎是一条直线,但实际上是所围面积为零的闭合曲线
		}

		private void menuItem14_Click(object sender, System.EventArgs e)
		{
		Graphics g=this.CreateGraphics();
			Pen pen1=new Pen(Color.Red);
			g.Clear(this.BackColor);
			const double PI=3.1416;
			int x,y,i,n,px,py,bx,by;
			double a;
			i=0;
			n=0;
			for(px=70;px<=370;px+=60)
			{
				i=i+1;
				for(py=40;py<=250;py+=60)
				{
					if(n==6)
					{
						n=1;
					}
					else 
					{
						n=n+1;
					}
					for(a=0;a<=2*PI;a+=PI/(20+n))
					{
						x=(int)(px+28.0*Math.Sin(n*a));
						y=(int)(py-28.0*Math.Cos(i*a));
						if(a==0)
						{
							p1.X=x;p1.Y=y;bx=x;by=y;
						}
						else
						{
							p2.X=x;p2.Y=y;
							g.DrawLine(pen1,p1,p2);
							p1=p2;
						}
					}
				}
			}
		}

		private void menuItem15_Click(object sender, System.EventArgs e)
		{
			Graphics g=this.CreateGraphics();
			Pen pen1=new Pen(Color.Red);
			g.Clear(this.BackColor);
			const double PI=3.1416;
			int x,y,i,n,px,py,bx,by;
			double a;
			i=0;
			n=0;
			for(px=100;px<=420;px+=120)
			{
				i=i+1;
				for(py=60;py<=300;py+=100)
				{
					if(n==8)
					{
						n=2;
					}
					else 
					{
						n=n+1;
					}
					for(a=0;a<=2*PI;a+=PI/(20+n))
					{
						x=(int)(px+45.0*Math.Sin(n*a));
						y=(int)(py-45.0*Math.Sin((n+1)*a));
						if(a==0)
						{
							p1.X=x;p1.Y=y;bx=x;by=y;
						}
						else
						{
							p2.X=x;p2.Y=y;
							g.DrawLine(pen1,p1,p2);
							p1=p2;
						}
					}
				}
			}
		}

		private void menuItem16_Click(object sender, System.EventArgs e)
		{
			Graphics g=this.CreateGraphics();
			Pen pen1=new Pen(Color.Black);
			g.Clear(this.BackColor);
			const double PI=3.1416;
			int x,y,i,n,px,py,bx,by;
			double a;
			i=0;
			n=0;
			for(px=70;px<=370;px+=60)
			{
				i=i+1;
				for(py=40;py<=250;py+=60)
				{
					if(n==6)
					{
						n=1;
					}
					else 
					{
						n=n+1;
					}
					for(a=0;a<=2*PI;a+=PI/(20+n))
					{
						x=(int)(px+28.0*Math.Cos(n*a));
						y=(int)(py-28.0*Math.Sin((n+1)*a));
						if(a==0)
						{
							p1.X=x;p1.Y=y;bx=x;by=y;
						}
						else
						{
							p2.X=x;p2.Y=y;
							g.DrawLine(pen1,p1,p2);
							p1=p2;
						}
					}
				}
			}
		}

		private void menuItem17_Click(object sender, System.EventArgs e)
		{
			//变成思想:
			//和绘制李沙育曲线类似。
			Graphics g=this.CreateGraphics();
			Pen pen1=new Pen(Color.Black);
			g.Clear(this.BackColor);
			const double PI=3.1416;
			int x,y,r;
			double a,al,bt,px,py;
			r=0;
			bt=0;
			for(a=0;a<=6*PI;a=a+PI/12.0f)
			{
				r=r+1;
				px=200+(r+20)*Math.Cos(a);
				py=140-(r+20)*Math.Sin(a);
				bt=bt+PI/24;
				for(al=0;al<=2*PI;al=al+PI/15)
				{
					x=(int)(px+r/6*Math.Cos(al+a));
					y=(int)(py-r/6*Math.Sin(al+bt));
					if(al==0)
					{
						p1.X=x;p1.Y=y;
					}
					else
					{
						p2.X=x;p2.Y=y;
						g.DrawLine(pen1,p1,p2);
						p1=p2;
					}
				}
			}
		}

		private void menuItem18_Click(object sender, System.EventArgs e)
		{
			Graphics g=this.CreateGraphics();
			Pen pen1=new Pen(Color.Red);
			g.Clear(this.BackColor);

			double i,j;
			int x1,x2,y1,y2;
			for(i=0;i<=6.2;i+=0.2)
			{
				x1=(int)(60*(1+Math.Sin(i))*Math.Cos(i));
                y1=(int)(60*(1+Math.Sin(i))*Math.Sin(i));
				for(j=0;j<=6.3;j+=0.03)
				{
					x2=(int)(60*Math.Cos(j));
					y2=(int)(60*Math.Sin(j));
					x2=220+x1+x2;
					y2=100+y1+y2;
					if(i==0&&j==0)
					{
						p1.X=x2;p1.Y=y2;
					}
					else
					{
						p2.X=x2;p2.Y=y2;
						g.DrawLine(pen1,p2,p1);
						p1=p2;
					}
				}
			}
		}

		private void menuItem20_Click(object sender, System.EventArgs e)
		{
			//编程思想:
			//本程序绘制蔷薇花曲线图案,程序中由式:
			//x=(int)(px+b*Math.Sin(m*a)*Math.Cos(a));
			//y=(int)(py+b*Math.Sin(m*a)*Math.Sin(a));
			//计算图形中点的坐标。
			//参数m值决定花瓣数,当m取奇数时,m值即为瓣数值;
			//当m值为偶数时,花瓣数为2m个。
			//   m值取奇数时,a值取0~PI
			//   m值取偶数时,a值取0~PI

			Graphics g=this.CreateGraphics();
			Pen pen1=new Pen(Color.Black);
			g.Clear(this.BackColor);
			const double PI=3.1416;
			double a,b=50.0;
			int m=1;
			int px,py,x,y,k;
			for(px=100;px<=340;px+=120)
			{
				for(py=50;py<=400;py+=120)
				{
					//判断m是奇数还是偶数,循环终值为k*PI
					m=m+1;
					if(m%2==0)
					{
						k=2;
					}
					else
					{
						k=1;
					}
					for(a=0.0;a<=k*PI;a+=PI/(30.0*m))
					{
						x=(int)(px+b*Math.Sin(m*a)*Math.Cos(a));
						y=(int)(py+b*Math.Sin(m*a)*Math.Sin(a));
						if(a==0)
						{
							p1.X=x;p1.Y=y;
						}
						else
						{
							p2.X=x;p2.Y=y;
							g.DrawLine(pen1,p1,p2);
							p1=p2;
						}
					}
				}
			}
		}

		private void menuItem21_Click(object sender, System.EventArgs e)
		{
			Graphics g=this.CreateGraphics();
			Pen pen1=new Pen(Color.Black);
			g.Clear(this.BackColor);
			const double PI=3.1416;
			double a,b=28;
			int n=1;
			int px,py,x,y,k,p,bx,by;
			for(px=100;px<=440;px+=90)
			{
				n=n+1;
				p=0;
				for(py=50;py<=300;py+=90)
				{
					p=p+1;
					if(n%2==0)
					{

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -