Exemplo n.º 1
0
 private void button4_Click(object sender, EventArgs e)
 {
     if (this.uC_Parabola1.IsValid())
     {
         var a = this.uC_Parabola1.A;
         var b = this.uC_Parabola1.B;
         var c = this.uC_Parabola1.C;
         //判断方程的参数,是否有效
         ParabolicEquation parabolic = new ParabolicEquation()
         {
             A = a, B = b, C = c
         };
         if (!parabolic.IsValid())
         {
             MessageBox.Show("输入的方程参数无效");
             return;
         }
         if (!this.axisControl1.CheckParabolicIsValid(parabolic))
         {
             MessageBox.Show("输入的方程不在坐标轴内");
             return;
         }
         bool flag = this.axisControl1.GenerateParabolic(parabolic);
         if (!flag)
         {
             MessageBox.Show("生成抛物线失败");
             return;
         }
     }
 }
Exemplo n.º 2
0
 private async void button7_Click(object sender, EventArgs e)
 {
     if (this.uC_Parabola1.IsValid())
     {
         var a = this.uC_Parabola1.A;
         var b = this.uC_Parabola1.B;
         var c = this.uC_Parabola1.C;
         //判断方程的参数,是否有效
         ParabolicEquation parabolic = new ParabolicEquation()
         {
             A = a, B = b, C = c
         };
         if (!parabolic.IsValid())
         {
             MessageBox.Show("输入的方程参数无效");
             return;
         }
         if (!this.axisControl1.CheckParabolicIsValid(parabolic))
         {
             MessageBox.Show("输入的方程不在坐标轴内");
             return;
         }
         List <PointF> lstPoints = this.axisControl1.GetPointFromEquation(parabolic);
         foreach (var ele in lstPoints)
         {
             axisControl1.GeneratePoint(ele);
             await Task.Delay(500);
         }
     }
 }
Exemplo n.º 3
0
        /// <summary>
        /// 检查抛物线方程是否有效
        /// </summary>
        /// <param name="parabolic"></param>
        /// <returns></returns>
        public bool CheckParabolicIsValid(ParabolicEquation parabolic)
        {
            List <PointF> lstPoint = GetPointFromEquation(parabolic);

            if (lstPoint.Count > 2)
            {
                return(true);
            }
            else
            {
                return(false);
            }
        }
Exemplo n.º 4
0
        public bool GenerateParabolic(ParabolicEquation parabolic)
        {
            List <PointF> lstPoint = GetPointFromEquation(parabolic);
            //将刻度点,转换成像素点
            List <PointF> lstPixlsPoint = ConvertScaleToPixls(lstPoint);
            Color         lineColor     = Color.SeaGreen;//线条的颜色
            Graphics      g             = this.CreateGraphics();

            g.DrawCurve(new Pen(lineColor, lineWidth), lstPixlsPoint.ToArray());
            g.DrawString(string.Format("P{0}", index), t_Font, Brushes.Black, new PointF(lstPixlsPoint[1].X + 2, lstPixlsPoint[1].Y - 2));
            this.label1.Text += string.Format("P{0}:y={1}x2+{2}x+{3} ; ", index, parabolic.A, parabolic.B, parabolic.C);
            index++;
            return(true);
        }
Exemplo n.º 5
0
        /// <summary>
        /// 从抛物线方程中取点值
        /// </summary>
        /// <param name="parabolic"></param>
        /// <returns></returns>
        public List <PointF> GetPointFromEquation(ParabolicEquation parabolic)
        {
            List <PointF> lstPoint = new List <PointF>();
            //从坐标轴最小值开始,隔0.5 取一个
            int j = 0;

            for (float i = 0 - this._AxisX.Max; i <= this._AxisX.Max; i = i + 0.5f)
            {
                PointF p = new PointF(i, parabolic.GetValueFromX(i));
                //再判断点是否在坐标轴内
                if (CheckPointIsValid(p) && (j == 0 || lstPoint[j - 1].X == i - 0.5f))
                {
                    lstPoint.Add(p);//抛物线内的点应该是连续的
                    j++;
                }
            }
            return(lstPoint);
        }