おはようございます、私はウェブ上で同様の質問とそれに関するチュートリアルがあることを知っていますが、コードを確認して修正してください。つまり、私のプロジェクトに何が問題なのかを知りたいのです。 メインパネルに放物線グラフを描く必要があります。 また、「表示」パネルのビュー(と放物線)を縮小したり拡大したりするために、ズームインとズームアウトの2つのボタンを含める必要があります。 尺度varを使用することをお勧めしました。 これは私のコードです:DrawLineを使用して放物線を描くC#
メモ:x0、y0はpanel_main x center、y centerです。
私は、方程式からx、yを決定するために使用されるx、yを持っています。
xpc、ypcはウィンドウスケール(ピクセルも同様)に変換されます。
xmin、xmaxは、一定の縮尺でパネル上に留まる極値です
私はあなたに私にヒントを与えることができたら幸いです!
public void DisegnaParabola()
{
Graphics gs = panel_main.CreateGraphics();
pen.Color = Color.Black;
scale = (x0*2)/zoom; //Pixels equivalent to 1x or 1y
n_punti = (x0*2)/scale; //Number of x math points that are visible in window
xmin = -(n_punti/2);
xmax = n_punti/2;
precision = 1/scale; //Increment of x to have 1px
if (asse_parabola.SelectedIndex == 0) //if Y axis
{
for (double i = xmin + precision; i < xmax; i += precision)
{
rifx = i - precision; //Old points
rifxpc = rifx * scale;
rify = (a * Math.Pow(rifx, 2)) + b * rifx + c;
rifypc = y0 - (rify * scale);
x = i; //New points
y = (a * Math.Pow(x, 2)) + b * x + c;
ypc = y0 - (y * scale);
gs.DrawLine(pen, (float)rifxpc, (float)rifypc, (float)xpc, (float)ypc);
}
}
else
{
scale = (y0*2)/zoom; //Pixels for 1y
n_punti = (y0*2)/scale; //Numbers of y in the window
ymin = -(n_punti/2);
ymax = n_punti/2;
for(double i=ymin+precision; i<ymax; i+=precision)
{
rify = y - precision;
rifypc = (y0*2) - rify * scale;
rifx = (a * Math.Pow(rify, 2)) + b * rify + c;
rifxpc = x0 + (rifx * scale);
y = i;
x = (a * Math.Pow(y, 2)) + b * y + c;
xpc = x0 + (x * scale);
gs.DrawLine(pen, (float)rifypc, (float)rifxpc, (float)ypc, (float)xpc);
}
}
lbl_canc.Visible = true;
}
_Graphics gs = panel_main.CreateGraphics(); _これは、結果が非永続的であるため、最初の間違いです。それ以外は、e.Graphicsオブジェクト(ここでお勧めします)またはBitmapを使用してPaintイベントを描画します。多くの 'DrawLine'呼び出しを使用する_gs.DrawLine_も、width = 1の不透明なペン以外のペンでは見栄えが悪いので、お勧めしません。ポイントを集めて一つの 'DrawLines'(複数の!)コールを使うのは良いです..私はすべてのタイプを見ることはできませんが、あなたは整数除算トラップを知っていればいいと思っています。 、 そうする! – TaW