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

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

设计思路

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

完整实现代码

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(
        )
        {
        // 初始化三角函数计算器UI
        angleTypeComboBox.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
              }"
              ;
              else
              secLabel.Text = "sec: undefined"
              ;
              if (Math.Sin(radians) != 0
              )
              cscLabel.Text = $"csc: {
              1.0 / Math.Sin(radians):F4
              }"
              ;
              else
              cscLabel.Text = "csc: undefined"
              ;
              if (Math.Tan(radians) != 0
              )
              cotLabel.Text = $"cot: {
              1.0 / Math.Tan(radians):F4
              }"
              ;
              else
              cotLabel.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: // e
              angleTextBox.Text = Math.E.ToString("F6"
              )
              ;
              break
              ;
              case 2: // √2
              angleTextBox.Text = Math.Sqrt(2
              ).ToString("F6"
              )
              ;
              break
              ;
              case 3: // √3
              angleTextBox.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. 三角函数计算器

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

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

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

使用说明

  1. 绘图

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

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

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

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

posted on 2025-10-05 14:41  slgkaifa  阅读(0)  评论(0)    收藏  举报

导航