C# 简单实现直线方程,抛物线方程

本例子是简单的在WinForm程序中实现在坐标系中绘制直线方程,抛物线方程,点。重新学习解析几何方面的知识。仅供学习分享使用,如有不足之处,还请指正。涉及知识点:直线方程的表达方式:一般表达式Ax+By+C=0抛物线表达式:y=Ax2+Bx+C坐标转换:由于WinForm中的坐标原点是左上角,数学二维坐标系的原点是在中间,所以需要转换单位转换:WinForm的单位是Pixl...
摘要由CSDN通过智能技术生成

本例子是简单的在WinForm程序中实现在坐标系中绘制直线方程,抛物线方程,点。重新学习解析几何方面的知识。仅供学习分享使用,如有不足之处,还请指正。

涉及知识点:

  • 直线方程的表达方式:一般表达式Ax+By+C=0
  • 抛物线表达式:y=Ax2+Bx+C
  • 坐标转换:由于WinForm中的坐标原点是左上角,数学二维坐标系的原点是在中间,所以需要转换
  • 单位转换:WinForm的单位是Pixls,但坐标系的单位不是,需要进行缩放。
  • 画图方法:程序中使用GDI+进行画图。

----------------------------------------------------------------------------------------------------------------------

效果图

如下:

---------------------------------------------------------------------------------------------------------

多边形扩展

【如下图所示】

//求多边形对应的边的平行线,然后再求相邻平行线的交点,连起来即是扩展多边形

核心算法

主要代码如下:

【方程类】

  1 using System;
  2 using System.Collections.Generic;
  3 using System.Linq;
  4 using System.Text;
  5 
  6 namespace DemoGeometry
  7 {
  8     /// <summary>
  9     /// 方程基类
 10     /// </summary>
 11     public abstract class Equation
 12     {
 13         public int A { get; set; }
 14         public int B { get; set; }
 15         public int C { get; set; }
 16 
 17         /// <summary>
 18         /// 判断是否有效
 19         /// </summary>
 20         /// <returns></returns>
 21         public abstract bool IsValid();
 22 
 23         /// <summary>
 24         /// 通过Y值获取x值
 25         /// </summary>
 26         /// <param name="y"></param>
 27         /// <returns></returns>
 28         public abstract float GetValueFromY(float y);
 29         /// <summary>
 30         /// 通过X获取Y值
 31         /// </summary>
 32         /// <param name="x"></param>
 33         /// <returns></returns>
 34         public abstract float GetValueFromX(float x);
 35     }
 36 
 37     /// <summary>
 38     /// 直线方程类一般式:Ax+By+C=0(A、B不同时为0)【适用于所有直线】
 39     /// </summary>
 40     public class LinearEquation:Equation
 41     {
 42         /// <summary>
 43         /// 通过X值得到Y值
 44         /// </summary>
 45         /// <param name="x"></param>
 46         /// <returns></returns>
 47         public override float GetValueFromX(float x)
 48         {
 49             if (B == 0)
 50             {
 51                 return float.MaxValue;
 52             }
 53             return -A * x * 1.0f / B - C * 1.0f / B;
 54         }
 55 
 56         public override float GetValueFromY(float y)
 57         {
 58             if (A == 0)
 59             {
 60                 return float.MaxValue;
 61             }
 62             return -B * y * 1.0f / A - C * 1.0f / A;
 63         }
 64 
 65         /// <summary>
 66         /// 判断是否有效方程
 67         /// </summary>
 68         /// <returns></returns>
 69         public override bool IsValid()
 70         {
 71             bool flag = true;
 72             if (A == 0 && B == 0)
 73             {
 74                 flag = false;
 75             }
 76             return flag;
 77         }
 78 
 79         public override string ToString()
 80         {
 81             return string.Format("{0}x+{1}y+{2}=0", A, B, C);
 82         }
 83     }
 84 
 85     /// <summary>
 86     /// 抛物线方程表达式 y=ax2+bx+c
 87     /// </summary>
 88     public class ParabolicEquation:Equation
 89     {
 90 
 91         /// <summary>
 92         /// 判断是否有效的方程
 93         /// </summary>
 94         /// <returns></returns>
 95         public override bool IsValid()
 96         {
 97             //A 不得等于0
 98             return A != 0;
 99         }
100 
101         /// <summary>
102         /// 通过X值得到Y值
103         /// </summary>
104         /// <param name="x"></param>
105         /// <returns></returns>
106         public override float GetValueFromX(float x)
107         {
108             double y = A * Math.Pow(x, 2) + B * x + C;
109             return float.Parse(y.ToString());
110         }
111 
112         public override float GetValueFromY(float y)
113         {
114             return 0.0f;
115         }
116     }
117 }
View Code

【控件类】

  1 using System;
  2 using System.Collections.Generic;
  3 using System.ComponentModel;
  4 using System.Drawing;
  5 using System.Data;
  6 using System.Linq;
  7 using System.Text;
  8 using System.Windows.Forms;
  9 
 10 namespace DemoGeometry
 11 {
 12     /// <summary>
 13     /// 坐标系控件
 14     /// </summary>
 15     public partial class AxisControl : UserControl
 16     {
 17         #region 属性
 18 
 19         private Axis _AxisX = new Axis() {  XName = "x" };
 20         /// <summary>
 21         /// X轴
 22         /// </summary>
 23         public Axis AxisX { get { return this._AxisX; }  }
 24 
 25         private Axis _AxisY = new Axis() { XName = "y" };
 26         /// <summary>
 27         
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值