当前位置: 首页 > news >正文

几何绘图与三角函数计算应用

几何绘图与三角函数计算应用

设计思路

  • 左侧为绘图控制面板,右侧为绘图区域
  • 支持绘制点、线、矩形、圆、多边形等基本几何图形
  • 实现三角函数计算器(正弦、余弦、正切等)
  • 包含角度/弧度切换和常用数学常数
  • 历史记录功能保存用户绘图

完整实现代码

using System;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Windows.Forms;namespace GeometryDrawingApp
{public partial class MainForm : Form{// 绘图状态变量private enum DrawingMode { None, Point, Line, Rectangle, Circle, Polygon, Select }private DrawingMode currentMode = DrawingMode.None;// 图形存储private List<Shape> shapes = new List<Shape>();private Shape currentShape = null;private Point startPoint;private Point endPoint;// 多边形绘制状态private List<Point> polygonPoints = new List<Point>();private bool isPolygonDrawing = false;// 选择状态private Shape selectedShape = null;// 颜色设置private Color drawingColor = Color.Blue;private Color selectedColor = Color.Red;public MainForm(){InitializeComponent();InitializeApp();}private void InitializeApp(){// 设置绘图区域背景drawingPanel.BackColor = Color.White;drawingPanel.Paint += DrawingPanel_Paint;drawingPanel.MouseDown += DrawingPanel_MouseDown;drawingPanel.MouseMove += DrawingPanel_MouseMove;drawingPanel.MouseUp += DrawingPanel_MouseUp;// 设置初始绘图模式SetDrawingMode(DrawingMode.Select);// 初始化三角函数计算器InitializeTrigCalculator();// 设置颜色选择器colorComboBox.Items.AddRange(new object[] { "Blue", "Red", "Green", "Purple", "Orange", "Black" });colorComboBox.SelectedIndex = 0;colorComboBox.SelectedIndexChanged += (s, e) =>{string colorName = colorComboBox.SelectedItem.ToString();drawingColor = Color.FromName(colorName);};// 设置线宽选择器for (int i = 1; i <= 5; i++)lineWidthComboBox.Items.Add(i);lineWidthComboBox.SelectedIndex = 0;// 设置填充样式fillStyleComboBox.Items.AddRange(new object[] { "None", "Solid", "Hatch" });fillStyleComboBox.SelectedIndex = 0;// 设置历史记录列表historyListBox.DisplayMember = "Description";}private void InitializeTrigCalculator(){// 初始化三角函数计算器UIangleTypeComboBox.Items.AddRange(new object[] { "Degrees", "Radians" });angleTypeComboBox.SelectedIndex = 0;// 添加常用常数constantComboBox.Items.AddRange(new object[] { "π", "e", "√2", "√3", "φ" });constantComboBox.SelectedIndex = 0;// 设置默认值angleTextBox.Text = "30";CalculateTrigFunctions();}private void SetDrawingMode(DrawingMode mode){currentMode = mode;statusLabel.Text = $"Mode: {mode}";// 如果从多边形绘制切换到其他模式,清除多边形点if (mode != DrawingMode.Polygon && isPolygonDrawing){polygonPoints.Clear();isPolygonDrawing = false;polygonButton.Text = "Polygon";}}// 图形基类public abstract class Shape{public Color Color { get; set; }public int LineWidth { get; set; }public bool Filled { get; set; }public bool Selected { get; set; }public abstract void Draw(Graphics g);public abstract bool Contains(Point point);public abstract string Description { get; }}// 点类public class PointShape : Shape{public Point Location { get; set; }public override void Draw(Graphics g){using (Brush brush = new SolidBrush(Selected ? Color.Red : Color)){g.FillEllipse(brush, Location.X - 3, Location.Y - 3, 6, 6);}}public override bool Contains(Point point){return Math.Sqrt(Math.Pow(point.X - Location.X, 2) + Math.Pow(point.Y - Location.Y, 2)) < 5;}public override string Description => $"Point at ({Location.X}, {Location.Y})";}// 线类public class LineShape : Shape{public Point Start { get; set; }public Point End { get; set; }public override void Draw(Graphics g){using (Pen pen = new Pen(Selected ? Color.Red : Color, LineWidth)){g.DrawLine(pen, Start, End);}}public override bool Contains(Point point){// 简化的点线距离计算double distance = Math.Abs((End.Y - Start.Y) * point.X - (End.X - Start.X) * point.Y +End.X * Start.Y - End.Y * Start.X) /Math.Sqrt(Math.Pow(End.Y - Start.Y, 2) + Math.Pow(End.X - Start.X, 2));return distance < 5;}public override string Description => $"Line from ({Start.X}, {Start.Y}) to ({End.X}, {End.Y})";}// 矩形类public class RectangleShape : Shape{public Rectangle Rect { get; set; }public override void Draw(Graphics g){using (Pen pen = new Pen(Selected ? Color.Red : Color, LineWidth)){if (Filled){using (Brush brush = new SolidBrush(Color.FromArgb(100, Color))){g.FillRectangle(brush, Rect);}}g.DrawRectangle(pen, Rect);}}public override bool Contains(Point point){return Rect.Contains(point);}public override string Description => $"Rectangle at ({Rect.X}, {Rect.Y}), Size: {Rect.Width}x{Rect.Height}";}// 圆类public class CircleShape : Shape{public Point Center { get; set; }public int Radius { get; set; }public override void Draw(Graphics g){Rectangle rect = new Rectangle(Center.X - Radius, Center.Y - Radius,Radius * 2, Radius * 2);using (Pen pen = new Pen(Selected ? Color.Red : Color, LineWidth)){if (Filled){using (Brush brush = new SolidBrush(Color.FromArgb(100, Color))){g.FillEllipse(brush, rect);}}g.DrawEllipse(pen, rect);}}public override bool Contains(Point point){double distance = Math.Sqrt(Math.Pow(point.X - Center.X, 2) + Math.Pow(point.Y - Center.Y, 2));return distance <= Radius + 3 && distance >= Radius - 3;}public override string Description => $"Circle at ({Center.X}, {Center.Y}), Radius: {Radius}";}// 多边形类public class PolygonShape : Shape{public List<Point> Points { get; set; } = new List<Point>();public override void Draw(Graphics g){if (Points.Count < 2) return;using (Pen pen = new Pen(Selected ? Color.Red : Color, LineWidth)){if (Filled && Points.Count > 2){using (Brush brush = new SolidBrush(Color.FromArgb(100, Color))){g.FillPolygon(brush, Points.ToArray());}}// 修复:当只有两个点时绘制线段而不是多边形if (Points.Count == 2){g.DrawLine(pen, Points[0], Points[1]);}else{g.DrawPolygon(pen, Points.ToArray());}}}public override bool Contains(Point point){if (Points.Count == 0) return false;// 对于只有两个点的情况,使用线段包含检测if (Points.Count == 2){double distance = Math.Abs((Points[1].Y - Points[0].Y) * point.X -(Points[1].X - Points[0].X) * point.Y +Points[1].X * Points[0].Y - Points[1].Y * Points[0].X) /Math.Sqrt(Math.Pow(Points[1].Y - Points[0].Y, 2) +Math.Pow(Points[1].X - Points[0].X, 2));return distance < 5;}// 对于三个点以上的多边形GraphicsPath path = new GraphicsPath();path.AddPolygon(Points.ToArray());return path.IsVisible(point);}public override string Description => $"Polygon with {Points.Count} points";}private void DrawingPanel_Paint(object sender, PaintEventArgs e){Graphics g = e.Graphics;g.SmoothingMode = SmoothingMode.AntiAlias;// 绘制所有图形foreach (Shape shape in shapes){shape.Draw(g);}// 绘制当前正在绘制的图形if (currentShape != null){currentShape.Draw(g);}// 绘制多边形点(如果正在绘制多边形)if (isPolygonDrawing && polygonPoints.Count > 0){// 绘制点之间的连线if (polygonPoints.Count > 1){using (Pen pen = new Pen(Color.Gray, 1)){pen.DashStyle = DashStyle.Dash;g.DrawLines(pen, polygonPoints.ToArray());}}// 绘制所有点foreach (Point p in polygonPoints){g.FillEllipse(Brushes.Blue, p.X - 3, p.Y - 3, 6, 6);}// 绘制从最后一个点到当前鼠标位置的线Point currentPos = drawingPanel.PointToClient(Cursor.Position);if (polygonPoints.Count > 0){using (Pen pen = new Pen(Color.DarkGray, 1)){pen.DashStyle = DashStyle.Dot;g.DrawLine(pen, polygonPoints[polygonPoints.Count - 1], currentPos);}}}}private void DrawingPanel_MouseDown(object sender, MouseEventArgs e){if (e.Button == MouseButtons.Right && isPolygonDrawing){// 右键取消多边形绘制polygonPoints.Clear();isPolygonDrawing = false;polygonButton.Text = "Polygon";drawingPanel.Invalidate();return;}if (e.Button != MouseButtons.Left) return;if (currentMode == DrawingMode.Select){// 选择图形selectedShape = null;foreach (Shape shape in shapes){shape.Selected = false;if (shape.Contains(e.Location)){selectedShape = shape;shape.Selected = true;statusLabel.Text = $"Selected: {shape.Description}";}}drawingPanel.Invalidate();return;}startPoint = e.Location;switch (currentMode){case DrawingMode.Point:currentShape = new PointShape{Location = e.Location,Color = drawingColor,LineWidth = (int)lineWidthComboBox.SelectedItem};shapes.Add(currentShape);historyListBox.Items.Add(currentShape.Description);currentShape = null;break;case DrawingMode.Line:case DrawingMode.Rectangle:case DrawingMode.Circle:// 这些图形需要开始点和结束点break;case DrawingMode.Polygon:if (!isPolygonDrawing){isPolygonDrawing = true;polygonPoints.Clear();polygonPoints.Add(e.Location);polygonButton.Text = "Complete Polygon";}else{polygonPoints.Add(e.Location);}break;}drawingPanel.Invalidate();}private void DrawingPanel_MouseMove(object sender, MouseEventArgs e){// 更新坐标显示coordinatesLabel.Text = $"X: {e.X}, Y: {e.Y}";if (e.Button != MouseButtons.Left) return;endPoint = e.Location;switch (currentMode){case DrawingMode.Line:currentShape = new LineShape{Start = startPoint,End = endPoint,Color = drawingColor,LineWidth = (int)lineWidthComboBox.SelectedItem};break;case DrawingMode.Rectangle:int width = endPoint.X - startPoint.X;int height = endPoint.Y - startPoint.Y;currentShape = new RectangleShape{Rect = new Rectangle(startPoint.X, startPoint.Y, width, height),Color = drawingColor,LineWidth = (int)lineWidthComboBox.SelectedItem,Filled = fillStyleComboBox.SelectedIndex > 0};break;case DrawingMode.Circle:int radius = (int)Math.Sqrt(Math.Pow(endPoint.X - startPoint.X, 2) +Math.Pow(endPoint.Y - startPoint.Y, 2));currentShape = new CircleShape{Center = startPoint,Radius = radius,Color = drawingColor,LineWidth = (int)lineWidthComboBox.SelectedItem,Filled = fillStyleComboBox.SelectedIndex > 0};break;}drawingPanel.Invalidate();}private void DrawingPanel_MouseUp(object sender, MouseEventArgs e){if (e.Button != MouseButtons.Left || currentShape == null) return;switch (currentMode){case DrawingMode.Line:case DrawingMode.Rectangle:case DrawingMode.Circle:shapes.Add(currentShape);historyListBox.Items.Add(currentShape.Description);currentShape = null;break;}}private void pointButton_Click(object sender, EventArgs e) => SetDrawingMode(DrawingMode.Point);private void lineButton_Click(object sender, EventArgs e) => SetDrawingMode(DrawingMode.Line);private void rectangleButton_Click(object sender, EventArgs e) => SetDrawingMode(DrawingMode.Rectangle);private void circleButton_Click(object sender, EventArgs e) => SetDrawingMode(DrawingMode.Circle);private void selectButton_Click(object sender, EventArgs e) => SetDrawingMode(DrawingMode.Select);private void polygonButton_Click(object sender, EventArgs e){if (isPolygonDrawing){// 完成多边形绘制if (polygonPoints.Count > 1) // 至少需要两个点{currentShape = new PolygonShape{Points = new List<Point>(polygonPoints),Color = drawingColor,LineWidth = (int)lineWidthComboBox.SelectedItem,Filled = fillStyleComboBox.SelectedIndex > 0};shapes.Add(currentShape);historyListBox.Items.Add(currentShape.Description);}else if (polygonPoints.Count == 1){// 如果只有一个点,创建点对象currentShape = new PointShape{Location = polygonPoints[0],Color = drawingColor,LineWidth = (int)lineWidthComboBox.SelectedItem};shapes.Add(currentShape);historyListBox.Items.Add(currentShape.Description);}polygonPoints.Clear();isPolygonDrawing = false;polygonButton.Text = "Polygon";SetDrawingMode(DrawingMode.Select);}else{SetDrawingMode(DrawingMode.Polygon);}drawingPanel.Invalidate();}private void clearButton_Click(object sender, EventArgs e){// 修复:正确清空所有图形和多边形状态shapes.Clear();historyListBox.Items.Clear();selectedShape = null;// 清空多边形绘制状态polygonPoints.Clear();isPolygonDrawing = false;polygonButton.Text = "Polygon";// 重置为选择模式SetDrawingMode(DrawingMode.Select);drawingPanel.Invalidate();}private void CalculateTrigFunctions(){if (double.TryParse(angleTextBox.Text, out double angleValue)){bool isDegrees = angleTypeComboBox.SelectedIndex == 0;double radians = isDegrees ? angleValue * Math.PI / 180.0 : angleValue;sinLabel.Text = $"sin: {Math.Sin(radians):F4}";cosLabel.Text = $"cos: {Math.Cos(radians):F4}";tanLabel.Text = $"tan: {Math.Tan(radians):F4}";// 避免除以零错误if (Math.Cos(radians) != 0)secLabel.Text = $"sec: {1.0 / Math.Cos(radians):F4}";elsesecLabel.Text = "sec: undefined";if (Math.Sin(radians) != 0)cscLabel.Text = $"csc: {1.0 / Math.Sin(radians):F4}";elsecscLabel.Text = "csc: undefined";if (Math.Tan(radians) != 0)cotLabel.Text = $"cot: {1.0 / Math.Tan(radians):F4}";elsecotLabel.Text = "cot: undefined";}else{sinLabel.Text = "sin: invalid input";cosLabel.Text = "cos: invalid input";tanLabel.Text = "tan: invalid input";secLabel.Text = "sec: invalid input";cscLabel.Text = "csc: invalid input";cotLabel.Text = "cot: invalid input";}}private void calculateButton_Click(object sender, EventArgs e){CalculateTrigFunctions();}private void constantComboBox_SelectedIndexChanged(object sender, EventArgs e){switch (constantComboBox.SelectedIndex){case 0: // πangleTextBox.Text = Math.PI.ToString("F6");break;case 1: // eangleTextBox.Text = Math.E.ToString("F6");break;case 2: // √2angleTextBox.Text = Math.Sqrt(2).ToString("F6");break;case 3: // √3angleTextBox.Text = Math.Sqrt(3).ToString("F6");break;case 4: // φ (黄金比例)angleTextBox.Text = ((1 + Math.Sqrt(5)) / 2).ToString("F6");break;}CalculateTrigFunctions();}private void deleteButton_Click(object sender, EventArgs e){if (selectedShape != null){shapes.Remove(selectedShape);selectedShape = null;drawingPanel.Invalidate();// 更新历史记录historyListBox.Items.Clear();foreach (Shape shape in shapes){historyListBox.Items.Add(shape.Description);}}}private void MainForm_Load(object sender, EventArgs e){// 添加示例图形shapes.Add(new PointShape { Location = new Point(100, 100), Color = Color.Blue });shapes.Add(new LineShape{Start = new Point(150, 150),End = new Point(250, 200),Color = Color.Green,LineWidth = 2});shapes.Add(new RectangleShape{Rect = new Rectangle(300, 100, 80, 60),Color = Color.Purple,LineWidth = 2});shapes.Add(new CircleShape{Center = new Point(200, 300),Radius = 50,Color = Color.Orange,LineWidth = 2});// 添加历史记录foreach (Shape shape in shapes){historyListBox.Items.Add(shape.Description);}}private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e){HelpForm f = new HelpForm();f.ShowDialog();}}
}

窗体设计代码 (MainForm.Designer.cs)

namespace GeometryDrawingApp
{partial class MainForm{private System.ComponentModel.IContainer components = null;protected override void Dispose(bool disposing){if (disposing && (components != null)){components.Dispose();}base.Dispose(disposing);}#region Windows Form Designer generated codeprivate void InitializeComponent(){System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainForm));this.drawingPanel = new System.Windows.Forms.Panel();this.controlPanel = new System.Windows.Forms.Panel();this.deleteButton = new System.Windows.Forms.Button();this.clearButton = new System.Windows.Forms.Button();this.fillStyleComboBox = new System.Windows.Forms.ComboBox();this.label5 = new System.Windows.Forms.Label();this.lineWidthComboBox = new System.Windows.Forms.ComboBox();this.label4 = new System.Windows.Forms.Label();this.colorComboBox = new System.Windows.Forms.ComboBox();this.label3 = new System.Windows.Forms.Label();this.polygonButton = new System.Windows.Forms.Button();this.selectButton = new System.Windows.Forms.Button();this.circleButton = new System.Windows.Forms.Button();this.rectangleButton = new System.Windows.Forms.Button();this.lineButton = new System.Windows.Forms.Button();this.pointButton = new System.Windows.Forms.Button();this.calculatorGroup = new System.Windows.Forms.GroupBox();this.cotLabel = new System.Windows.Forms.Label();this.cscLabel = new System.Windows.Forms.Label();this.secLabel = new System.Windows.Forms.Label();this.tanLabel = new System.Windows.Forms.Label();this.cosLabel = new System.Windows.Forms.Label();this.sinLabel = new System.Windows.Forms.Label();this.calculateButton = new System.Windows.Forms.Button();this.constantComboBox = new System.Windows.Forms.ComboBox();this.label2 = new System.Windows.Forms.Label();this.angleTypeComboBox = new System.Windows.Forms.ComboBox();this.angleTextBox = new System.Windows.Forms.TextBox();this.label1 = new System.Windows.Forms.Label();this.statusStrip = new System.Windows.Forms.StatusStrip();this.statusLabel = new System.Windows.Forms.ToolStripStatusLabel();this.coordinatesLabel = new System.Windows.Forms.ToolStripStatusLabel();this.historyGroup = new System.Windows.Forms.GroupBox();this.historyListBox = new System.Windows.Forms.ListBox();this.controlPanel.SuspendLayout();this.calculatorGroup.SuspendLayout();this.statusStrip.SuspendLayout();this.historyGroup.SuspendLayout();this.SuspendLayout();// // drawingPanel// this.drawingPanel.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.drawingPanel.BackColor = System.Drawing.Color.White;this.drawingPanel.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;this.drawingPanel.Location = new System.Drawing.Point(12, 12);this.drawingPanel.Name = "drawingPanel";this.drawingPanel.Size = new System.Drawing.Size(600, 500);this.drawingPanel.TabIndex = 0;// // controlPanel// this.controlPanel.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) | System.Windows.Forms.AnchorStyles.Right));this.controlPanel.BackColor = System.Drawing.SystemColors.ControlLight;this.controlPanel.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;this.controlPanel.Controls.Add(this.deleteButton);this.controlPanel.Controls.Add(this.clearButton);this.controlPanel.Controls.Add(this.fillStyleComboBox);this.controlPanel.Controls.Add(this.label5);this.controlPanel.Controls.Add(this.lineWidthComboBox);this.controlPanel.Controls.Add(this.label4);this.controlPanel.Controls.Add(this.colorComboBox);this.controlPanel.Controls.Add(this.label3);this.controlPanel.Controls.Add(this.polygonButton);this.controlPanel.Controls.Add(this.selectButton);this.controlPanel.Controls.Add(this.circleButton);this.controlPanel.Controls.Add(this.rectangleButton);this.controlPanel.Controls.Add(this.lineButton);this.controlPanel.Controls.Add(this.pointButton);this.controlPanel.Controls.Add(this.calculatorGroup);this.controlPanel.Controls.Add(this.historyGroup);this.controlPanel.Location = new System.Drawing.Point(618, 12);this.controlPanel.Name = "controlPanel";this.controlPanel.Size = new System.Drawing.Size(280, 640);this.controlPanel.TabIndex = 1;// // deleteButton// this.deleteButton.BackColor = System.Drawing.Color.LightCoral;this.deleteButton.Location = new System.Drawing.Point(142, 295);this.deleteButton.Name = "deleteButton";this.deleteButton.Size = new System.Drawing.Size(120, 30);this.deleteButton.TabIndex = 16;this.deleteButton.Text = "Delete Selected";this.deleteButton.UseVisualStyleBackColor = false;this.deleteButton.Click += new System.EventHandler(this.deleteButton_Click);// // clearButton// this.clearButton.BackColor = System.Drawing.Color.LightCoral;this.clearButton.Location = new System.Drawing.Point(16, 295);this.clearButton.Name = "clearButton";this.clearButton.Size = new System.Drawing.Size(120, 30);this.clearButton.TabIndex = 15;this.clearButton.Text = "Clear All";this.clearButton.UseVisualStyleBackColor = false;this.clearButton.Click += new System.EventHandler(this.clearButton_Click);// // fillStyleComboBox// this.fillStyleComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;this.fillStyleComboBox.FormattingEnabled = true;this.fillStyleComboBox.Location = new System.Drawing.Point(90, 258);this.fillStyleComboBox.Name = "fillStyleComboBox";this.fillStyleComboBox.Size = new System.Drawing.Size(172, 21);this.fillStyleComboBox.TabIndex = 14;// // label5// this.label5.AutoSize = true;this.label5.Location = new System.Drawing.Point(16, 261);this.label5.Name = "label5";this.label5.Size = new System.Drawing.Size(48, 13);this.label5.TabIndex = 13;this.label5.Text = "Fill Style:";// // lineWidthComboBox// this.lineWidthComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;this.lineWidthComboBox.FormattingEnabled = true;this.lineWidthComboBox.Location = new System.Drawing.Point(90, 231);this.lineWidthComboBox.Name = "lineWidthComboBox";this.lineWidthComboBox.Size = new System.Drawing.Size(172, 21);this.lineWidthComboBox.TabIndex = 12;// // label4// this.label4.AutoSize = true;this.label4.Location = new System.Drawing.Point(16, 234);this.label4.Name = "label4";this.label4.Size = new System.Drawing.Size(60, 13);this.label4.TabIndex = 11;this.label4.Text = "Line Width:";// // colorComboBox// this.colorComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;this.colorComboBox.FormattingEnabled = true;this.colorComboBox.Location = new System.Drawing.Point(90, 204);this.colorComboBox.Name = "colorComboBox";this.colorComboBox.Size = new System.Drawing.Size(172, 21);this.colorComboBox.TabIndex = 10;// // label3// this.label3.AutoSize = true;this.label3.Location = new System.Drawing.Point(16, 207);this.label3.Name = "label3";this.label3.Size = new System.Drawing.Size(34, 13);this.label3.TabIndex = 9;this.label3.Text = "Color:";// // polygonButton// this.polygonButton.Location = new System.Drawing.Point(142, 168);this.polygonButton.Name = "polygonButton";this.polygonButton.Size = new System.Drawing.Size(120, 30);this.polygonButton.TabIndex = 8;this.polygonButton.Text = "Polygon";this.polygonButton.UseVisualStyleBackColor = true;this.polygonButton.Click += new System.EventHandler(this.polygonButton_Click);// // selectButton// this.selectButton.Location = new System.Drawing.Point(16, 168);this.selectButton.Name = "selectButton";this.selectButton.Size = new System.Drawing.Size(120, 30);this.selectButton.TabIndex = 7;this.selectButton.Text = "Select";this.selectButton.UseVisualStyleBackColor = true;this.selectButton.Click += new System.EventHandler(this.selectButton_Click);// // circleButton// this.circleButton.Location = new System.Drawing.Point(142, 132);this.circleButton.Name = "circleButton";this.circleButton.Size = new System.Drawing.Size(120, 30);this.circleButton.TabIndex = 6;this.circleButton.Text = "Circle";this.circleButton.UseVisualStyleBackColor = true;this.circleButton.Click += new System.EventHandler(this.circleButton_Click);// // rectangleButton// this.rectangleButton.Location = new System.Drawing.Point(16, 132);this.rectangleButton.Name = "rectangleButton";this.rectangleButton.Size = new System.Drawing.Size(120, 30);this.rectangleButton.TabIndex = 5;this.rectangleButton.Text = "Rectangle";this.rectangleButton.UseVisualStyleBackColor = true;this.rectangleButton.Click += new System.EventHandler(this.rectangleButton_Click);// // lineButton// this.lineButton.Location = new System.Drawing.Point(142, 96);this.lineButton.Name = "lineButton";this.lineButton.Size = new System.Drawing.Size(120, 30);this.lineButton.TabIndex = 4;this.lineButton.Text = "Line";this.lineButton.UseVisualStyleBackColor = true;this.lineButton.Click += new System.EventHandler(this.lineButton_Click);// // pointButton// this.pointButton.Location = new System.Drawing.Point(16, 96);this.pointButton.Name = "pointButton";this.pointButton.Size = new System.Drawing.Size(120, 30);this.pointButton.TabIndex = 3;this.pointButton.Text = "Point";this.pointButton.UseVisualStyleBackColor = true;this.pointButton.Click += new System.EventHandler(this.pointButton_Click);// // calculatorGroup// this.calculatorGroup.Controls.Add(this.cotLabel);this.calculatorGroup.Controls.Add(this.cscLabel);this.calculatorGroup.Controls.Add(this.secLabel);this.calculatorGroup.Controls.Add(this.tanLabel);this.calculatorGroup.Controls.Add(this.cosLabel);this.calculatorGroup.Controls.Add(this.sinLabel);this.calculatorGroup.Controls.Add(this.calculateButton);this.calculatorGroup.Controls.Add(this.constantComboBox);this.calculatorGroup.Controls.Add(this.label2);this.calculatorGroup.Controls.Add(this.angleTypeComboBox);this.calculatorGroup.Controls.Add(this.angleTextBox);this.calculatorGroup.Controls.Add(this.label1);this.calculatorGroup.Location = new System.Drawing.Point(16, 331);this.calculatorGroup.Name = "calculatorGroup";this.calculatorGroup.Size = new System.Drawing.Size(246, 180);this.calculatorGroup.TabIndex = 2;this.calculatorGroup.TabStop = false;this.calculatorGroup.Text = "Trigonometry Calculator";// // cotLabel// this.cotLabel.AutoSize = true;this.cotLabel.Location = new System.Drawing.Point(130, 150);this.cotLabel.Name = "cotLabel";this.cotLabel.Size = new System.Drawing.Size(30, 13);this.cotLabel.TabIndex = 11;this.cotLabel.Text = "cot: ";// // cscLabel// this.cscLabel.AutoSize = true;this.cscLabel.Location = new System.Drawing.Point(130, 130);this.cscLabel.Name = "cscLabel";this.cscLabel.Size = new System.Drawing.Size(30, 13);this.cscLabel.TabIndex = 10;this.cscLabel.Text = "csc: ";// // secLabel// this.secLabel.AutoSize = true;this.secLabel.Location = new System.Drawing.Point(130, 110);this.secLabel.Name = "secLabel";this.secLabel.Size = new System.Drawing.Size(30, 13);this.secLabel.TabIndex = 9;this.secLabel.Text = "sec: ";// // tanLabel// this.tanLabel.AutoSize = true;this.tanLabel.Location = new System.Drawing.Point(20, 150);this.tanLabel.Name = "tanLabel";this.tanLabel.Size = new System.Drawing.Size(28, 13);this.tanLabel.TabIndex = 8;this.tanLabel.Text = "tan: ";// // cosLabel// this.cosLabel.AutoSize = true;this.cosLabel.Location = new System.Drawing.Point(20, 130);this.cosLabel.Name = "cosLabel";this.cosLabel.Size = new System.Drawing.Size(30, 13);this.cosLabel.TabIndex = 7;this.cosLabel.Text = "cos: ";// // sinLabel// this.sinLabel.AutoSize = true;this.sinLabel.Location = new System.Drawing.Point(20, 110);this.sinLabel.Name = "sinLabel";this.sinLabel.Size = new System.Drawing.Size(27, 13);this.sinLabel.TabIndex = 6;this.sinLabel.Text = "sin: ";// // calculateButton// this.calculateButton.Location = new System.Drawing.Point(150, 70);this.calculateButton.Name = "calculateButton";this.calculateButton.Size = new System.Drawing.Size(80, 25);this.calculateButton.TabIndex = 5;this.calculateButton.Text = "Calculate";this.calculateButton.UseVisualStyleBackColor = true;this.calculateButton.Click += new System.EventHandler(this.calculateButton_Click);// // constantComboBox// this.constantComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;this.constantComboBox.FormattingEnabled = true;this.constantComboBox.Location = new System.Drawing.Point(90, 73);this.constantComboBox.Name = "constantComboBox";this.constantComboBox.Size = new System.Drawing.Size(54, 21);this.constantComboBox.TabIndex = 4;this.constantComboBox.SelectedIndexChanged += new System.EventHandler(this.constantComboBox_SelectedIndexChanged);// // label2// this.label2.AutoSize = true;this.label2.Location = new System.Drawing.Point(20, 76);this.label2.Name = "label2";this.label2.Size = new System.Drawing.Size(56, 13);this.label2.TabIndex = 3;this.label2.Text = "Constants:";// // angleTypeComboBox// this.angleTypeComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;this.angleTypeComboBox.FormattingEnabled = true;this.angleTypeComboBox.Location = new System.Drawing.Point(170, 43);this.angleTypeComboBox.Name = "angleTypeComboBox";this.angleTypeComboBox.Size = new System.Drawing.Size(60, 21);this.angleTypeComboBox.TabIndex = 2;// // angleTextBox// this.angleTextBox.Location = new System.Drawing.Point(90, 43);this.angleTextBox.Name = "angleTextBox";this.angleTextBox.Size = new System.Drawing.Size(74, 20);this.angleTextBox.TabIndex = 1;this.angleTextBox.Text = "30";// // label1// this.label1.AutoSize = true;this.label1.Location = new System.Drawing.Point(20, 46);this.label1.Name = "label1";this.label1.Size = new System.Drawing.Size(37, 13);this.label1.TabIndex = 0;this.label1.Text = "Angle:";// // statusStrip// this.statusStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {this.statusLabel,this.coordinatesLabel});this.statusStrip.Location = new System.Drawing.Point(0, 665);this.statusStrip.Name = "statusStrip";this.statusStrip.Size = new System.Drawing.Size(910, 22);this.statusStrip.TabIndex = 2;this.statusStrip.Text = "statusStrip1";// // statusLabel// this.statusLabel.Name = "statusLabel";this.statusLabel.Size = new System.Drawing.Size(42, 17);this.statusLabel.Text = "Ready";// // coordinatesLabel// this.coordinatesLabel.Name = "coordinatesLabel";this.coordinatesLabel.Size = new System.Drawing.Size(34, 17);this.coordinatesLabel.Text = "X: Y:";// // historyGroup// this.historyGroup.Controls.Add(this.historyListBox);this.historyGroup.Location = new System.Drawing.Point(16, 3);this.historyGroup.Name = "historyGroup";this.historyGroup.Size = new System.Drawing.Size(246, 87);this.historyGroup.TabIndex = 0;this.historyGroup.TabStop = false;this.historyGroup.Text = "Drawing History";// // historyListBox// this.historyListBox.Dock = System.Windows.Forms.DockStyle.Fill;this.historyListBox.FormattingEnabled = true;this.historyListBox.Location = new System.Drawing.Point(3, 16);this.historyListBox.Name = "historyListBox";this.historyListBox.Size = new System.Drawing.Size(240, 68);this.historyListBox.TabIndex = 0;// // MainForm// this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;this.ClientSize = new System.Drawing.Size(910, 687);this.Controls.Add(this.statusStrip);this.Controls.Add(this.controlPanel);this.Controls.Add(this.drawingPanel);this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));this.Name = "MainForm";this.Text = "Geometry Drawing App";this.Load += new System.EventHandler(this.MainForm_Load);this.controlPanel.ResumeLayout(false);this.controlPanel.PerformLayout();this.calculatorGroup.ResumeLayout(false);this.calculatorGroup.PerformLayout();this.statusStrip.ResumeLayout(false);this.statusStrip.PerformLayout();this.historyGroup.ResumeLayout(false);this.ResumeLayout(false);this.PerformLayout();}#endregionprivate System.Windows.Forms.Panel drawingPanel;private System.Windows.Forms.Panel controlPanel;private System.Windows.Forms.StatusStrip statusStrip;private System.Windows.Forms.ToolStripStatusLabel statusLabel;private System.Windows.Forms.GroupBox historyGroup;private System.Windows.Forms.ListBox historyListBox;private System.Windows.Forms.Button pointButton;private System.Windows.Forms.Button lineButton;private System.Windows.Forms.Button rectangleButton;private System.Windows.Forms.Button circleButton;private System.Windows.Forms.Button polygonButton;private System.Windows.Forms.Button selectButton;private System.Windows.Forms.ComboBox colorComboBox;private System.Windows.Forms.Label label3;private System.Windows.Forms.ComboBox lineWidthComboBox;private System.Windows.Forms.Label label4;private System.Windows.Forms.ComboBox fillStyleComboBox;private System.Windows.Forms.Label label5;private System.Windows.Forms.Button clearButton;private System.Windows.Forms.GroupBox calculatorGroup;private System.Windows.Forms.Label label1;private System.Windows.Forms.TextBox angleTextBox;private System.Windows.Forms.ComboBox angleTypeComboBox;private System.Windows.Forms.Button calculateButton;private System.Windows.Forms.ComboBox constantComboBox;private System.Windows.Forms.Label label2;private System.Windows.Forms.Label sinLabel;private System.Windows.Forms.Label cotLabel;private System.Windows.Forms.Label cscLabel;private System.Windows.Forms.Label secLabel;private System.Windows.Forms.Label tanLabel;private System.Windows.Forms.Label cosLabel;private System.Windows.Forms.Button deleteButton;private System.Windows.Forms.ToolStripStatusLabel coordinatesLabel;}
}

功能说明

这个几何绘图应用包含以下核心功能:

  1. 绘图功能

    • 支持绘制点、线、矩形、圆和多边形
    • 可选择颜色、线宽和填充样式
    • 选择工具可选取已绘制的图形
    • 可删除选中的图形或清空整个画布
  2. 三角函数计算器

    • 支持角度和弧度模式
    • 计算正弦、余弦、正切及其倒数函数
    • 内置常用数学常数(π、e、√2等)
  3. 历史记录

    • 记录所有绘制的图形
    • 显示图形类型和位置信息
  4. 用户界面

    • 左侧为绘图区域,右侧为控制面板
    • 状态栏显示当前模式和鼠标坐标
    • 直观的工具栏和设置选项

使用说明

  1. 绘图

    • 选择要绘制的图形类型(点、线、矩形等)
    • 在绘图区域点击并拖动鼠标创建图形
    • 对于多边形:点击多个点,最后点击"Complete Polygon"按钮完成
  2. 编辑

    • 使用选择工具点击图形可选中它
    • 点击"Delete Selected"删除选中图形
    • 点击"Clear All"清空整个画布
  3. 三角函数计算

    • 输入角度值(或使用预设常数)
    • 选择角度单位(度或弧度)
    • 点击"Calculate"按钮计算结果

这个应用程序结合了几何绘图和数学计算功能,适合用于教学、工程绘图和数学学习场景。界面设计直观,功能完整,代码结构清晰易于扩展。

相关文章:

  • 软件安全:漏洞利用与渗透测试剖析、流程、方法、案例
  • 《深度剖析Meta“Habitat 3.0”:AI训练的虚拟环境革新》
  • 蓝桥杯17114 残缺的数字
  • 大数据Spark(六十一):Spark基于Standalone提交任务流程
  • 缓存击穿 缓存穿透 缓存雪崩
  • python collections 模块
  • OffSec 基础实践课程助力美国海岸警卫队学院网络团队革新训练
  • 基于Web的安全漏洞分析与修复平台设计与实现
  • 最长连续序列
  • Kafka 单机部署启动教程(适用于 Spark + Hadoop 环境)
  • UE接口通信
  • 四款主流物联网操作系统(FreeRTOS、LiteOS、RT-Thread、AliOS)的综合对比分析
  • 常见排序算法详解与C语言实现
  • LINUX_LCD编程 TFT LCD
  • 数据结构 [一] 基本概念
  • 【网络安全】fastjson原生链分析
  • Axure高保真LayUI框架 V2.6.8元件库
  • Python基础:文件简单操作
  • StringRedisTemplete使用
  • 网络安全中网络诈骗的攻防博弈
  • 随便建设网站犯法吗/搜索引擎优化seo名词解释
  • 南京英文网站制作/seo关键词词库
  • 做婚介网站可行性报告模板/应用商店aso
  • 建网站广州/网站怎么被百度收录
  • 互联网趋势发展前景/网站关键词优化排名怎么做
  • 数据网站怎么做的/nba最新新闻