详细介绍:几何绘图与三角函数计算应用

news/2025/10/5 14:48:56/文章来源:https://www.cnblogs.com/slgkaifa/p/19126579

详细介绍:几何绘图与三角函数计算应用

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

设计思路

完整实现代码

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";}}// 图形基类publicabstractclass Shape{public Color Color {get;set;}public int LineWidth {get;set;}public bool Filled {get;set;}public bool Selected {get;set;}publicabstract void Draw(Graphics g);publicabstract bool Contains(Point point);publicabstract string Description {get;}}// 点类publicclass PointShape : Shape{public Point Location {get;set;}publicoverride void Draw(Graphics g){using (Brush brush =new SolidBrush(Selected ? Color.Red : Color)){g.FillEllipse(brush, Location.X - 3, Location.Y - 3, 6, 6);}}publicoverride bool Contains(Point point){return Math.Sqrt(Math.Pow(point.X - Location.X, 2) + Math.Pow(point.Y - Location.Y, 2)) <5;}publicoverride string Description =>$"Point at ({Location.X}, {Location.Y})";}// 线类publicclass LineShape : Shape{public Point Start {get;set;}public Point End {get;set;}publicoverride void Draw(Graphics g){using (Pen pen =new Pen(Selected ? Color.Red : Color, LineWidth)){g.DrawLine(pen, Start, End);}}publicoverride 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;}publicoverride string Description =>$"Line from ({Start.X}, {Start.Y}) to ({End.X}, {End.Y})";}// 矩形类publicclass RectangleShape : Shape{public Rectangle Rect {get;set;}publicoverride 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);}}publicoverride bool Contains(Point point){return Rect.Contains(point);}publicoverride string Description =>$"Rectangle at ({Rect.X}, {Rect.Y}), Size: {Rect.Width}x{Rect.Height}";}// 圆类publicclass CircleShape : Shape{public Point Center {get;set;}public int Radius {get;set;}publicoverride 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);}}publicoverride 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;}publicoverride string Description =>$"Circle at ({Center.X}, {Center.Y}), Radius: {Radius}";}// 多边形类publicclass PolygonShape : Shape{public List<Point> Points {get;set;} =new List<Point>();publicoverride 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());}}}publicoverride 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);}publicoverride 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);}elseif (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 code
private 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(
)
;
}
#endregion
private 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. 三角函数计算器

  3. 历史记录

  4. 用户界面

使用说明

  1. 绘图

  2. 编辑

  3. 三角函数计算

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/928364.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

详细介绍:Hive在实际应用中,如何选择合适的JOIN优化策略?

详细介绍:Hive在实际应用中,如何选择合适的JOIN优化策略?2025-10-05 14:43 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !importa…

【VM虚拟机】VM新版本,虚拟机中键盘输入延迟卡顿

关键设置: 虚拟机路径下.vmx文件中添加 keyboard.vusb.enable = "TRUE" 其他什么core-数量,3D加速都不好使

京东联盟 wordpress模板网站可以做优化

摘要&#xff1a;本篇博客深入介绍了如何借助深度学习技术开发癌症图像检测系统&#xff0c;以提高医疗诊断的精度和速度。系统基于先进的YOLOv8算法&#xff0c;并对比分析了YOLOv7、YOLOv6、YOLOv5的性能&#xff0c;如mAP和F1 Score。详细解释了YOLOv8的原理&#xff0c;并附…

2025石灰源头厂家最新推荐榜单:深度解析生石灰,熟石灰物流效率与综合实力

当前石灰行业需求持续攀升,但市场乱象凸显:部分企业产能波动大、交货周期长,劣质产品充斥市场,技术落后与环保不达标问题频发,严重困扰下游采购决策。尤其在高活性、专用化产品需求年增 18% 的背景下,企业亟需权…

AtCoder Beginner Contest 426 游记

$20min$ 拿下四题,自信跳过看起来复杂的 E 去做数据结构 F,结果迷失在调线段树未能通过。省流 \(20min\) 拿下四题,自信跳过看起来复杂的 E 去做数据结构 F,结果迷失在调线段树未能通过。10.4 内含剧透,请vp后再来…

广东手机网站制作价格进一步推进网站建设

文章目录------------------------------学习教程篇-------------------------------bilibili哔哩哔哩网易云课堂siki学院&#xff1a;泰课在线&#xff1a;可汗学院&#xff1a;线性代数的本质 - bilibili计算机科学速成课 - bilibiliLearnOpenGL&#xff1a;The Book of Shad…

淘宝客网站如何做推广方案wordpress接入微信支付

程序员在编程过程中&#xff0c;经常会在代码中使用到“where 11”&#xff0c;这是为什么呢&#xff1f;SQL注入初次看到这种写法的同学肯定很纳闷&#xff0c;加不加where 11&#xff0c;查询不都一样吗&#xff1f;例如&#xff1a;select * from customers; 与 select * fr…

如何把MCP服务集成到智能体?手把手教学(含视频教程)

导航前言 视频讲解 作品展示 工作流程展示 操作步骤一 新建mcpserver工作流 二 测试智能体 三 发布智能体结语 参考AI+ 的时代已经来临,不管你是否愿意,你都必须去接受它。前言 在前面的文章《10min搭建一个大模型智…

bootimg.exe检查验证备份导出的img镜像文件是否正常

前言全局说明经常刷手机的人,必要做的就是先备份,那备份出的文件,是否正常,就要用 bootimg.exe 来验证注意:刷机,会丢失用户:照片、聊天等信息资料。请备份基带等信息。请慎重刷机 !!! 注意:刷机,会丢失用户:…

华为云Flexus+DeepSeek征文|华为云Flexus服务器dify高效的平台通过自然语言转sql并执行搭建电商数据分析

华为云Flexus+DeepSeek征文|华为云Flexus服务器dify高效的平台通过自然语言转sql并执行搭建电商数据分析pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: …

《独立开发者精选工具》第 019 期

IndieTools 是一个专为独立开发者打造的精选工具和资源平台。通过直观的分类,轻松找到 Web 开发、设计、营销、SEO 等全流程实用工具。 独立开发者必备网站:https://www.indietools.work Github: https://github.com…

备案个人可以做视频网站郑州 网站建设 东区

抖音的转场动画—iOS https://www.jianshu.com/p/29b0165de712 抖音的上下滑实现—iOS https://www.jianshu.com/p/e8799510c7aa转载于:https://www.cnblogs.com/qingzZ/p/10281740.html

什么网站做简历最好嘉兴网站排名优化报价

总结: ●使用模板时必须确定出通用数据类型T,并且能够推争出一致的类型 #include<iostream> using namespace std; #include<string> #include<fstream>//函数模板注意事项 template<class T> //typename 可以替换成class void mySwap(T&a, T&am…

实用指南:MyBatis 的动态 SQL

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

活着,就像明天就要死去一样

活着,就像明天就要死去一样本文来自博客园,作者:breezecn,转载请注明原文链接:https://www.cnblogs.com/breezecn/p/19126572

社保网站人员减少怎么做三门峡住房和建设局网站

Qt实现可伸缩的侧边工具栏 一直在网上找&#xff0c;发现大多的实现方案都是用一个按钮&#xff0c;按下控制侧边栏的伸缩&#xff0c;但是我想要实现鼠标悬浮在侧边栏的时候就伸出&#xff0c;移开就收缩的功能&#xff0c;也没找到好的参考&#xff0c;所以决定自己实现一个…

一 网站开发背景成都网站建设方案

全省工业互联网平台推广会上台州工业互联网平台发布、7个工业互联网项目签约——“企业间一座座孤立的烟囱&#xff0c;通过数据‘联姻’打破了信息孤岛。”5月22日&#xff0c;在路桥召开的全省工业互联网平台建设推广会上&#xff0c;专家们这样形容正在发生的变革。工业互联…

vue漏洞

Vue 源码泄露(最常见低危→高危) 原理: webpack 默认生成 .js.map,生产环境未关闭,可反编译还原完整源码,泄露接口、密钥、注释路径。 黑盒特征: 响应头 X-SourceMap: xxx.js.map 或 JS 末尾出现 //# sourceMap…

安居客网站应该如何做如何对产品进行推广

观看视频前&#xff0c;请先点击上面的蓝色字“杨式太极拳习练之家教学视频"再点击“关注”&#xff0c;这样您就可以继续免费收到太极拳剑相关教学视频了。加关注后&#xff0c;再【点击】上面的蓝色字“杨式太极拳习练之家教学视频"&#xff0c;进入到“杨式太极拳…