C# 画二次曲线

C# 画二次曲线,c#,graph,C#,Graph,我试着在一张图表上画一个抛物线,我已经把它转换成了一个折线图 private void calculate_Click(object sender, EventArgs e) { double numberA = Convert.ToDouble(valueA.Text); double numberB = Convert.ToDouble(valueB.Text); double numberC = Convert.ToDoub

我试着在一张图表上画一个抛物线,我已经把它转换成了一个折线图

     private void calculate_Click(object sender, EventArgs e)
    {
        double numberA = Convert.ToDouble(valueA.Text);
        double numberB = Convert.ToDouble(valueB.Text);
        double numberC = Convert.ToDouble(valueC.Text);
        displayFormula();
        double answer1 = quadCalculator1(numberA, numberB, numberC);
        double answer2 = quadCalcualtor2(numberA, numberB, numberC);
        quadOutput.Text += answer1 + " OR " + answer2;
        this.chart1.Series["quadGraph"].Points.AddXY(answer1, 0);
        this.chart1.Series["quadGraph"].Points.AddXY(answer2, 0);
        this.chart1.Series["quadGraph"].Points.AddXY(0, numberC);
    }

然而,输出是一条直线,我认为我需要更多的点?

简而言之,是的,您确实需要更多的数据点

您拥有的是绘图截取x轴和y轴的点,绘制这3个点是一个良好的开端,但绘图引擎无法解释这三个点来自哪种类型的数据集(例如,可以找到包含与任何二次曲线相同截取的sin、cos和锯齿图)

如果您想绘制曲线本身的近似值,一个快速而肮脏的解决方案是取答案1和答案2之间的差值(注意它们相等或是虚构的情况)并计算一组点的y值,从最低答案下方的某个比例开始,在最高答案上方的某个比例开始。然后,您可以简单地旋转结果并一次添加一个

    private void calculate_Click(object sender, EventArgs e)
{
    double numberA = Convert.ToDouble(valueA.Text);
    double numberB = Convert.ToDouble(valueB.Text);
    double numberC = Convert.ToDouble(valueC.Text);
    displayFormula();
    double answer1 = quadCalculator1(numberA, numberB, numberC);
    double answer2 = quadCalcualtor2(numberA, numberB, numberC);
    quadOutput.Text += answer1 + " OR " + answer2;

    //this.chart1.Series["quadGraph"].Points.AddXY(answer1, 0);
    //this.chart1.Series["quadGraph"].Points.AddXY(answer2, 0);
    //this.chart1.Series["quadGraph"].Points.AddXY(0, numberC);

    // Do error checking here to determine validity of answers
    // and which is the highest and lowest of the pair

    int count = 20;
    double[,] data = GetPoints(numberA, numberB, numberC, answer1, answer2, count);
    for(int i = 0; i < count; i++)
    {
        this.chart1.Series["quadGraph"].Points.AddXY(data[i, 0], data[i, 1]);
    }
}

private double[,] GetPoints(double a, double b, double c, double xInterceptLow, double xInterceptHigh, int pointCount)
{
    double[,] output = new double[pointCount,2];

    double subRange = xInterceptLow - xInterceptHigh;
    double delta = (2* subRange) / pointCount;

    double xMin = xInterceptLow - (subRange/2);
    double xMax = xInterceptHigh + (subRange/2);

    for(int i = 0; i < pointCount; i++)
    {
        double x = xMin + ( i * delta);
        double ans = GetY(a, b, c, x);
        output[i, 0] = x;
        output[i, 1] = ans;
    }
    return output;
}

private double GetY(double a, double b, double c, double x)
{
    double answer = (a * a * x) + (b * x) + c;
    return answer;
}
private void计算\u单击(对象发送方,事件参数e)
{
double numberA=Convert.ToDouble(valueA.Text);
double numberB=Convert.ToDouble(valueB.Text);
double numberC=Convert.ToDouble(valueC.Text);
显示公式();
双回答1=四计算器1(numberA、numberB、numberC);
双重回答2=四位数或2(数字A、数字B、数字RC);
quadOutput.Text+=answer1+”或“+answer2”;
//这个.chart1.系列[“四元图”].点.AddXY(答案1,0);
//这个.chart1.系列[“四元图”].点.AddXY(答案2,0);
//这个.chart1.Series[“quadragraph”].Points.AddXY(0,numberC);
//在此处进行错误检查以确定答案的有效性
//这对中哪一个是最高的,哪一个是最低的
整数计数=20;
double[,]data=GetPoints(numberA、numberB、numberC、answer1、answer2、count);
for(int i=0;i
谢谢。我添加了一个for循环,用于计算坐标的20个值

for (int i = -10; i < 10; i++)
{
    double pointX = i;
    double pointY = anyQuad(answer1, answer2, numberA, numberB, numberC, pointX);
    this.chart1.Series["quadGraph"].Points.AddXY(pointX, pointY);
}
for(int i=-10;i<10;i++)
{
双点x=i;
双点Y=anyQuad(answer1、answer2、numberA、numberB、numberC、pointX);
这个.chart1.Series[“quadragraph”].Points.AddXY(pointX,pointY);
}
适合任何需要它的人