为什么这段代码不能绘制抛物线?

时间:2012-06-21 09:55:47

标签: c# winforms graphics drawing

为什么这段代码不会绘制抛物线?它尽可能简单 - 对于每个x使用给定函数计算y。给定y = x ^ 2我应该在左上角绘制面向抛物线的顶点,但它只绘制一些位移点。

private void DrawParabole(Graphics g)
    {
        for (int x = 0; x < pictureBox1.Width; x++)
        {
            g.DrawRectangle(
                Pens.Black, 
                x,
                FY(x), 
                1, 
                1
             );
        }
    }

    private int FY(int x)
    {
        int y = A*x^2 + B*x + C;
        return y;
    }

3 个答案:

答案 0 :(得分:4)

您获取错误值/散点的原因是因为您使用的是XOR^运算符而非Math.Pow()

为了计算,让我们说A*x^2你必须使用Math.Pow()而不是^

int y = A*(Math.Pow(x, 2)) + B*x + C;
return y;

那应该为你解决,如果没有,那就用它:

int y = A*(Math.Pow((double)x, 2D)) + B*x + C;
return y;

希望这有帮助!

答案 1 :(得分:3)

如果您的代码是C#,则^是按位异或。请改用Math.Pow()。

答案 2 :(得分:0)

使用MatthewRz的更正数学:

    private int FY(int x)
    {
        int y = (int)(A * (Math.Pow(x, 2)) + B * x + C);
        return y;
    }

你仍然只会看到点(因为每个步骤的Y变化超过X),使用以下循环来获得点之间的线:

    private void DrawParabole(Graphics g, int w)
    {
        for (int x = 0; x < w; x++)
        {
            g.DrawLine(
                Pens.Black,
                x,
                FY(x-1),
                x,
                FY(x));
        }
    }