为什么这段代码不会画抛物线?它尽可能简单 - 对于每个 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;
}
您得到错误值/分散点的原因是因为您使用的是 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;
希望这有帮助!
如果你的代码是 C#,^ 是按位 XOR。请改用 Math.Pow()。
使用 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));
}
}