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; } } }
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); } } }
/// <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); } }
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); }
/// <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); }