📄 form1.cs
字号:
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
namespace 空间曲面
{
/// <summary>
/// Form1 的摘要说明。
/// </summary>
public class Form1 : System.Windows.Forms.Form
{
private System.Windows.Forms.MainMenu mainMenu1;
private System.Windows.Forms.MenuItem menuItem1;
private System.Windows.Forms.MenuItem menuItem2;
private System.Windows.Forms.PictureBox pictureBox1;
public Point p1=new Point();
public Point p2=new Point();
public Point p3=new Point();
private System.Windows.Forms.MenuItem menuItem4;
private System.Windows.Forms.MenuItem menuItem6;
private System.Windows.Forms.MenuItem menuItem7;
private System.Windows.Forms.MenuItem menuItem8;
private System.Windows.Forms.MenuItem menuItem9;
private System.Windows.Forms.MenuItem menuItem3;
private System.Windows.Forms.MenuItem menuItem5;
/// <summary>
/// 必需的设计器变量。
/// </summary>
private System.ComponentModel.Container components = null;
public Form1()
{
//
// Windows 窗体设计器支持所必需的
//
InitializeComponent();
//
// TODO: 在 InitializeComponent 调用后添加任何构造函数代码
//
}
/// <summary>
/// 清理所有正在使用的资源。
/// </summary>
protected override void Dispose( bool disposing )
{
if( disposing )
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}
#region Windows 窗体设计器生成的代码
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.mainMenu1 = new System.Windows.Forms.MainMenu();
this.menuItem1 = new System.Windows.Forms.MenuItem();
this.menuItem2 = new System.Windows.Forms.MenuItem();
this.menuItem4 = new System.Windows.Forms.MenuItem();
this.menuItem6 = new System.Windows.Forms.MenuItem();
this.menuItem7 = new System.Windows.Forms.MenuItem();
this.menuItem8 = new System.Windows.Forms.MenuItem();
this.menuItem9 = new System.Windows.Forms.MenuItem();
this.pictureBox1 = new System.Windows.Forms.PictureBox();
this.menuItem3 = new System.Windows.Forms.MenuItem();
this.menuItem5 = new System.Windows.Forms.MenuItem();
this.SuspendLayout();
//
// mainMenu1
//
this.mainMenu1.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
this.menuItem1,
this.menuItem4,
this.menuItem6,
this.menuItem8});
//
// menuItem1
//
this.menuItem1.Index = 0;
this.menuItem1.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
this.menuItem2,
this.menuItem5});
this.menuItem1.Text = "数学曲面";
//
// menuItem2
//
this.menuItem2.Index = 0;
this.menuItem2.Text = "回转曲面";
this.menuItem2.Click += new System.EventHandler(this.menuItem2_Click);
//
// menuItem4
//
this.menuItem4.Index = 1;
this.menuItem4.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
this.menuItem3});
this.menuItem4.Text = "Coons曲面";
//
// menuItem6
//
this.menuItem6.Index = 2;
this.menuItem6.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
this.menuItem7});
this.menuItem6.Text = "贝济埃曲线";
//
// menuItem7
//
this.menuItem7.Index = 0;
this.menuItem7.Text = "双三次贝济埃曲线";
//
// menuItem8
//
this.menuItem8.Index = 3;
this.menuItem8.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
this.menuItem9});
this.menuItem8.Text = "B样条曲面";
//
// menuItem9
//
this.menuItem9.Index = 0;
this.menuItem9.Text = "双三次B样条曲面";
//
// pictureBox1
//
this.pictureBox1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.pictureBox1.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
this.pictureBox1.Location = new System.Drawing.Point(8, 8);
this.pictureBox1.Name = "pictureBox1";
this.pictureBox1.Size = new System.Drawing.Size(528, 432);
this.pictureBox1.TabIndex = 0;
this.pictureBox1.TabStop = false;
//
// menuItem3
//
this.menuItem3.Index = 0;
this.menuItem3.Text = "双三次Coons曲面";
//
// menuItem5
//
this.menuItem5.Index = 1;
this.menuItem5.Text = "双线性曲面";
//
// Form1
//
this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
this.ClientSize = new System.Drawing.Size(544, 446);
this.Controls.Add(this.pictureBox1);
this.Menu = this.mainMenu1;
this.Name = "Form1";
this.Text = "Form1";
this.ResumeLayout(false);
}
#endregion
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()
{
Application.Run(new Form1());
}
private void menuItem2_Click(object sender, System.EventArgs e)
{
Graphics g=pictureBox1.CreateGraphics();
Pen pen1=new Pen(Color.Blue);
g.Clear(this.BackColor);
double[,] r=new double[4,4]; double[,] v=new double[4,4];
double[] p=new double[2]; double[] q=new double[3];
double[] pp=new double[4]; double[] qq=new double[4];
int i,j,k;
int zo,l,m;
double xmin,xmax,ymin,ymax,kx,ky,angle,u,w,theta;
xmin=-11;xmax=2;ymin=-4.5;ymax=250.0*(xmax-xmin)/400.0+ymin;
kx=400.0/(xmax-xmin); ky=250.0/(ymax-ymin);
p[0]=4;p[1]=0.5;angle=3.1415926/8;
zo=2; int i1,j1;
for(i1=0;i1<4;i1++)
{
for(j1=0;j1<4;j1++)
{
v[i1,j1]=0;
}
}
v[3,3]=1; v[zo,zo]=1;
i1=zo+1;
if(i1==3)i1=0;
j1=i1+1;
if(j1==3)j1=0;
v[i1,i1]=Math.Cos(angle); v[j1,j1]=v[i1,i1];
v[j1,i1]=Math.Sin(angle); v[i1,j1]=-v[j1,i1];
angle=0; zo=0;
int i2,j2;
for(i2=0;i2<4;i2++)
{
for(j2=0;j2<4;j2++)
{
r[i2,j2]=0;
}
}
r[3,3]=1; r[zo,zo]=1;
i2=zo+1;
if(i2==3)i2=0;
j2=i2+1;
if(j2==3)j2=0;
r[i2,i2]=Math.Cos(angle); r[j2,j2]=r[i2,i2];
r[i2,j2]=Math.Sin(angle); r[j2,i2]=-r[i2,j2];
int i3,j3;
double[,] temp=new double[4,4];
for(i3=0;i3<4;i3++)
{
for(j3=0;j3<4;j3++)
{
temp[i3,j3]=0;
for(k=0;k<4;k++)
{
temp[i3,j3]+=v[i3,k]*r[k,j3];
}
}
}
for(i3=0;i3<4;i3++)
{
for(j3=0;j3<4;j3++)
{
v[i3,j3]=temp[i3,j3];
}
}
l=10; m=20;
for(i=0;i<=l;i++)
{
u=(double)i/l;
for(j=0;j<=m;j++)
{
w=(double)j/m;
theta=2*3.1415926*w;
q[0]=p[0]*p[0]*u*u/(4*p[1]); q[1]=p[0]*u*Math.Cos(theta);
q[2]=p[0]*u*Math.Sin(theta);
int i4,j4;
for(i4=0;i4<3;i4++)
{
pp[i4]=q[i4]; q[i4]=0; qq[i4]=q[i4];
}
pp[3]=1; qq[3]=pp[3];
for(i4=0;i4<4;i4++)
{
for(j4=0;j4<4;j4++)
{
qq[i4]=qq[i4]+pp[j4]*v[j4,i4];
}
}
for(i4=0;i4<3;i4++)
{
q[i4]=qq[i4];
}
if(j==0)
{
p1.X=(int)(kx*(-q[0]-xmin)+50);
p1.Y=-(int)(ky*(q[2]-ymin)-270);
}
else
{
p2.X=(int)(kx*(-q[0]-xmin)+50);
p2.Y=-(int)(ky*(q[2]-ymin)-270);
g.DrawLine(pen1,p1,p2);
p1=p2;
}
}
}
for(i=0;i<=m;i++)
{
w=(double)i/m;
for(j=0;j<=l;j++)
{
u=(double)j/l;
theta=2*3.1415926*w;
q[0]=p[0]*p[0]*u*u/(4*p[1]); q[1]=p[0]*u*Math.Cos(theta);
q[2]=p[0]*u*Math.Sin(theta);
int i5,j5;
for(i5=0;i5<3;i5++)
{
pp[i5]=q[i5]; q[i5]=0; qq[i5]=q[i5];
}
pp[3]=1; qq[3]=pp[3];
for(i5=0;i5<4;i5++)
{
for(j5=0;j5<4;j5++)
{
qq[i5]=qq[i5]+pp[j5]*v[j5,i5];
}
}
for(i5=0;i5<3;i5++)
{
q[i5]=qq[i5];
}
if(j==0)
{
p1.X=(int)(kx*(-q[0]-xmin)+50);
p1.Y=-(int)(ky*(q[2]-ymin)-270);
}
else
{
p2.X=(int)(kx*(-q[0]-xmin)+50);
p2.Y=-(int)(ky*(q[2]-ymin)-270);
g.DrawLine(pen1,p1,p2);
p1=p2;
}
}
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -