📄 form1.cs
字号:
{
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 + -