1

为什么这段代码不会画抛物线?它尽可能简单 - 对于每个 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;
    }
4

3 回答 3

4

您得到错误值/散点的原因是因为您使用的是XORor^运算符而不是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;

希望这可以帮助!

于 2012-06-21T10:06:26.963 回答
3

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

于 2012-06-21T10:06:37.073 回答
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));
        }
    }
于 2012-06-21T10:15:54.873 回答