C#窗体程序画倾斜一定角度的椭圆

Angie ·
更新时间:2024-11-13
· 713 次阅读

  using System;   using System.Collections.Generic;   using System.ComponentModel;   using System.Data;   using System.Drawing;   using System.Drawing.Drawing2D;   using System.Linq;   using System.Text;   using System.Threading.Tasks;   using System.Windows.Forms;   namespace Ellipse   {   public partial class Form1 : Form   {   PointF xyPoint = new PointF(); //左上角的X,Y坐标   PointF centerPoint = new PointF();//椭圆的中心点   PointF movePoint = new PointF();   PointF xiePointF=new PointF();   PointF xiedPointF = new PointF();//倾斜一定角度后的点   private double perAngle = 0;   private double nowAngle;   PointF[] pointFs=new PointF[201];   PointF[] pointFs1=new PointF[201];//与pointFs对称的点数组,椭圆是对称的   PointF[] xiePointFs=new PointF[201];//倾斜的椭圆上半部分   PointF[] xiePointFs1 = new PointF[201];//倾斜的椭圆下半部分,对称的部分   private float a =200;   private float b =100;   private float stepLength = 2;//通过X坐标逐次加2计算出Y坐标,将所有坐标存在数组中,用DrawCurve连接   private float xLength = 0;//点到坐标Y轴的线段距离   private float yLength = 0;//颠倒坐标X轴的线段距离   private float dbYlength = 0;   private float xiedLength = 0;//点到椭圆中心点的线段长度   private int angle = 0;//倾斜的角度   public Form1()   {   InitializeComponent();   }   private void panel1_Paint(object sender, PaintEventArgs e)   {   }   private void panel1_MouseClick(object sender, MouseEventArgs e)////画布鼠标键点击事件,重画图形   {   if (e.Button != MouseButtons.Left)   {   return;   }   if (this.textBox1.Text == "")   {   this.errorProvider1.SetError(this.textBox1, "请输入倾斜的角度");   return;   }   else   {   this.errorProvider1.SetError(this.textBox1, "");   }   xyPoint.X = this.panel1.Width/2-200;   xyPoint.Y = this.panel1.Height/2-100;   centerPoint.X = xyPoint.X + a;   centerPoint.Y = xyPoint.Y + b;   Graphics graphics = this.panel1.CreateGraphics();   graphics.SmoothingMode = SmoothingMode.HighQuality;   graphics.Clear(this.panel1.BackColor);   Pen pen = new Pen(Color.Red);   for (int index = 0; index < pointFs.Length; index++)   {   movePoint.X = index * stepLength + xyPoint.X;   xLength = centerPoint.X - movePoint.X;   yLength = (float)(Math.Sqrt((1 - (xLength * xLength) / 40000) * 10000));   movePoint.Y = b - yLength + xyPoint.Y;   pointFs[index] = movePoint;   }   graphics.DrawCurve(pen, pointFs, 1.5f);   for (int index = 0; index < pointFs1.Length; index++)   {   dbYlength = centerPoint.Y - pointFs[index].Y;   pointFs1[index].Y = centerPoint.Y + dbYlength;   pointFs1[index].X = pointFs[index].X;   }   graphics.DrawCurve(pen, pointFs1, 1.5f);   for (int index = 0; index < pointFs.Length; index++)   {   xiePointF = pointFs[index];   double startAngle = Math.Atan2(xiePointF.Y - centerPoint.Y, xiePointF.X - centerPoint.X);   string jiaodu = this.textBox1.Text;   perAngle = int.Parse(jiaodu) * Math.PI / 180;   nowAngle = startAngle + perAngle;   xiedLength = (float)Math.Sqrt(Math.Pow(xiePointF.X - centerPoint.X, 2) + Math.Pow(xiePointF.Y - centerPoint.Y, 2));   xiedPointF.X = centerPoint.X - (float)(xiedLength * Math.Cos(nowAngle));   xiedPointF.Y = centerPoint.Y + (float)(xiedLength * Math.Sin(nowAngle));   xiePointFs[index] = xiedPointF;   }   graphics.DrawCurve(pen, xiePointFs, 1.5f);   for (int index = 0; index < pointFs1.Length; index++)   {   xiePointF = pointFs1[index];   double startAngle = Math.Atan2(xiePointF.Y - centerPoint.Y, xiePointF.X - centerPoint.X);   string jiaodu = this.textBox1.Text;   perAngle = int.Parse(jiaodu) * Math.PI / 180;   nowAngle = startAngle + perAngle;   xiedLength = (float)Math.Sqrt(Math.Pow(xiePointF.X - centerPoint.X, 2) + Math.Pow(xiePointF.Y - centerPoint.Y, 2));   xiedPointF.X = centerPoint.X - (float)(xiedLength * Math.Cos(nowAngle));   xiedPointF.Y = centerPoint.Y + (float)(xiedLength * Math.Sin(nowAngle));   xiePointFs1[index] = xiedPointF;   }   graphics.DrawCurve(pen, xiePointFs1, 1.5f);   }   private void button1_Click(object sender, EventArgs e)//倾斜角度,每次递增10度   {   angle += 10;   this.textBox1.Text = angle.ToString();   if (this.textBox1.Text == "")   {   this.errorProvider1.SetError(this.textBox1, "请输入倾斜的角度");   return;   }   else   {   this.errorProvider1.SetError(this.textBox1, "");   }   xyPoint.X = this.panel1.Width / 2-200;   xyPoint.Y = this.panel1.Height / 2-100;   centerPoint.X = xyPoint.X + a;   centerPoint.Y = xyPoint.Y + b;   Graphics graphics = this.panel1.CreateGraphics();   graphics.SmoothingMode = SmoothingMode.HighQuality;   graphics.Clear(this.panel1.BackColor);   Pen pen = new Pen(Color.Red);   for (int index = 0; index < pointFs.Length; index++)   {   movePoint.X = index * stepLength + xyPoint.X;   xLength = centerPoint.X - movePoint.X;   yLength = (float)(Math.Sqrt((1 - (xLength * xLength) / 40000) * 10000));   movePoint.Y = b - yLength + xyPoint.Y;   pointFs[index] = movePoint;   }   graphics.DrawCurve(pen, pointFs, 1.5f);   for (int index = 0; index < pointFs1.Length; index++)   {   dbYlength = centerPoint.Y - pointFs[index].Y;   pointFs1[index].Y = centerPoint.Y + dbYlength;   pointFs1[index].X = pointFs[index].X;   }   graphics.DrawCurve(pen, pointFs1, 1.5f);   for (int index = 0; index < pointFs.Length; index++)   {   xiePointF = pointFs[index];   double startAngle = Math.Atan2(xiePointF.Y - centerPoint.Y, xiePointF.X - centerPoint.X);   string jiaodu = this.textBox1.Text;   perAngle = int.Parse(jiaodu) * Math.PI / 180;   nowAngle = startAngle + perAngle;   xiedLength = (float)Math.Sqrt(Math.Pow(xiePointF.X - centerPoint.X, 2) + Math.Pow(xiePointF.Y - centerPoint.Y, 2));   xiedPointF.X = centerPoint.X - (float)(xiedLength * Math.Cos(nowAngle));   xiedPointF.Y = centerPoint.Y + (float)(xiedLength * Math.Sin(nowAngle));   xiePointFs[index] = xiedPointF;   }   graphics.DrawCurve(pen, xiePointFs, 1.5f);   for (int index = 0; index < pointFs1.Length; index++)   {   xiePointF = pointFs1[index];   double startAngle = Math.Atan2(xiePointF.Y - centerPoint.Y, xiePointF.X - centerPoint.X);   string jiaodu = this.textBox1.Text;   perAngle = int.Parse(jiaodu) * Math.PI / 180;   nowAngle = startAngle + perAngle;   xiedLength = (float)Math.Sqrt(Math.Pow(xiePointF.X - centerPoint.X, 2) + Math.Pow(xiePointF.Y - centerPoint.Y, 2));   xiedPointF.X = centerPoint.X - (float)(xiedLength * Math.Cos(nowAngle));   xiedPointF.Y = centerPoint.Y + (float)(xiedLength * Math.Sin(nowAngle));   xiePointFs1[index] = xiedPointF;   }   graphics.DrawCurve(pen, xiePointFs1, 1.5f);   }   private void button2_Click(object sender, EventArgs e)//倾斜角度,每次递减10度   {   angle -= 10;   this.textBox1.Text = angle.ToString();   if (this.textBox1.Text == "")   {   this.errorProvider1.SetError(this.textBox1, "请输入倾斜的角度");   return;   }   else   {   this.errorProvider1.SetError(this.textBox1, "");   }   xyPoint.X = this.panel1.Width / 2-200;   xyPoint.Y = this.panel1.Height / 2-100;   centerPoint.X = xyPoint.X + a;   centerPoint.Y = xyPoint.Y + b;   Graphics graphics = this.panel1.CreateGraphics();   graphics.SmoothingMode = SmoothingMode.HighQuality;   graphics.Clear(this.panel1.BackColor);   Pen pen = new Pen(Color.Red);   for (int index = 0; index < pointFs.Length; index++)   {   movePoint.X = index * stepLength + xyPoint.X;   xLength = centerPoint.X - movePoint.X;   yLength = (float)(Math.Sqrt((1 - (xLength * xLength) / 40000) * 10000));   movePoint.Y = b - yLength + xyPoint.Y;   pointFs[index] = movePoint;   }   graphics.DrawCurve(pen, pointFs, 1.5f);   for (int index = 0; index < pointFs1.Length; index++)   {   dbYlength = centerPoint.Y - pointFs[index].Y;   pointFs1[index].Y = centerPoint.Y + dbYlength;   pointFs1[index].X = pointFs[index].X;   }   graphics.DrawCurve(pen, pointFs1, 1.5f);   for (int index = 0; index < pointFs.Length; index++)   {   xiePointF = pointFs[index];   double startAngle = Math.Atan2(xiePointF.Y - centerPoint.Y, xiePointF.X - centerPoint.X);   string jiaodu = this.textBox1.Text;   perAngle = int.Parse(jiaodu) * Math.PI / 180;   nowAngle = startAngle + perAngle;   xiedLength = (float)Math.Sqrt(Math.Pow(xiePointF.X - centerPoint.X, 2) + Math.Pow(xiePointF.Y - centerPoint.Y, 2));   xiedPointF.X = centerPoint.X - (float)(xiedLength * Math.Cos(nowAngle));   xiedPointF.Y = centerPoint.Y + (float)(xiedLength * Math.Sin(nowAngle));   xiePointFs[index] = xiedPointF;   }   graphics.DrawCurve(pen, xiePointFs, 1.5f);   for (int index = 0; index < pointFs1.Length; index++)   {   xiePointF = pointFs1[index];   double startAngle = Math.Atan2(xiePointF.Y - centerPoint.Y, xiePointF.X - centerPoint.X);   string jiaodu = this.textBox1.Text;   perAngle = int.Parse(jiaodu) * Math.PI / 180;   nowAngle = startAngle + perAngle;   xiedLength = (float)Math.Sqrt(Math.Pow(xiePointF.X - centerPoint.X, 2) + Math.Pow(xiePointF.Y - centerPoint.Y, 2));   xiedPointF.X = centerPoint.X - (float)(xiedLength * Math.Cos(nowAngle));   xiedPointF.Y = centerPoint.Y + (float)(xiedLength * Math.Sin(nowAngle));   xiePointFs1[index] = xiedPointF;   }   graphics.DrawCurve(pen, xiePointFs1, 1.5f);   }   private void textBox1_TextChanged(object sender, EventArgs e)//输入倾斜的角度   {   angle = int.Parse(this.textBox1.Text);   }   }   }



程序 窗体 椭圆 C#

需要 登录 后方可回复, 如果你还没有账号请 注册新账号