私はSFMLライブラリを使ってC++でグラフ作成プログラムを作成しています。これまで私は画面に機能を描くことができました。私は途中で2つの問題に遭遇しました。 最初は、私の機能の終わりから飛行機の原点に戻るような線です。不正な行がウィンドウに描画される
あなたはこの画像でそれを見ることができます。
あなたは、この「ならず者」の行は、それが原点に近づくにつれて色が変化するようで見ることができるように。私の最初の質問は、この行とは何ですか私はどのように私の窓からそれを根絶することができますか?
わずかに無関係と複数の数学的である第二の問題は、この画像で見ることができる。
もしグラフが連続未定義または非ある点である漸近線が描画されて見ることができるように。これは私に2番目の質問につながります:漸近線を特定し、それをウィンドウに描画しない方法(コード内)はありますか?
ウィンドウに描かれた何のための私のコードは次のとおりです。
VertexArray axis(Lines, 4);
VertexArray curve(PrimitiveType::LinesStrip, 1000);
axis[0].position = Vector2f(100000, 0);
axis[1].position = Vector2f(-100000, 0);
axis[2].position = Vector2f(0, -100000);
axis[3].position = Vector2f(0, 100000);
float x;
for (x = -pi; x < pi; x += .0005f)
{
curve.append(Vertex(Vector2f(x, -tan(x)), Color::Green));
}
私は非常に任意の入力をお願い申し上げます。)
更新:多数の人々これの入力に
感謝コードは漸近問題を修正する上でうまくいくようです:
for (x = -30*pi; x < 30*pi; x += .0005f)
{
x0 = x1; y0 = y1;
x1 = x; y1 = -1/sin(x);
a = 0;
a = fabs(atan2(y1 - y0, x1 - x0));
if (a > .499f*pi)
{
curve.append(Vertex(Vector2f(x1, y1), Color::Transparent));
}
else
{
curve.append(Vertex(Vector2f(x1, y1), Color::Green));
}
}
アップデート2:次のコードは、不正な行を取り除きます
:
VertexArray curve(Lines, 1000);
float x,y;
for (x = -30 * pi; x < 30 * pi; x += .0005f)
{
y = -asin(x);
curve.append(Vertex(Vector2f(x, y)));
}
for (x = -30 * pi + .0005f; x < 30 * pi; x += .0005f)
{
y = -asin(x);
curve.append(Vertex(Vector2f(x, y)));
}
不正な行が白く見えます。白い線を含むコードを投稿できますか? – user3853544
@ user3853544あなたが参照する白い線は、軸です。そのコードは私の記事の最後のセクションに含まれています。 "axis [n] .pos ..."の部分です。 – billy606
原点の南西の最初のイメージでは、軸の一部ではない小さな白い線があるように見えます。 2つの不正な行に緑色と白いものがあるかもしれないかのように見えます – user3853544