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()

計算するには、たとえば、Math.Pow()A*x^2使用する必要があります。^

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#の場合、^はビット単位のXORです。代わりに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 に答える