最も簡単なオプションは、線の解像度を高めることである - すなわちより、小さい線を有します。これは達成するのが簡単で、ユースケースで受け入れられるかもしれません。コメント欄で
Sean Clineの例では、良い出発点でなければなりません:
for (float x = -50.0f; x < 50.0f; x += .25f)
{
curve.append(Vertex(Vector2f(x,- sin(x))));
}
あなたは、簡単に範囲とステップを一般化した値で遊ぶことができます。
float min_range = -200.f;
float max_range = 200.f;
float step = 0.5f;
for (float x = min_range; x < max_range ; x += step)
{
curve.append(Vertex(Vector2f(x,- sin(x))));
}
最後に、これを素敵なインターフェイスの背後で抽象化することができます:
using precision = float;
struct plot_params
{
precision _min_range;
precision _max_range;
precision _step;
};
template <typename TFunction>
auto plot(const plot_params pp, TFunction&& f)
{
assert(pp._min_range <= pp._max_range);
assert(pp._step > 0.f);
VertexArray curve(PrimitiveType::LineStrip,
std::ceil((pp._max_range - pp._min_range)/pp._step);
for (auto x = pp._min_range; x < pp._max_range; x += pp._step)
{
curve.append(Vertex(f(x)));
}
}
そして、次のようにplot
を使用することができます。
const auto my_params = []
{
plot_params pp;
pp._min_range = -200.f;
pp._max_range = 200.f;
pp._step = 0.5f;
return pp;
})();
auto curve = plot(my_params,
[](auto x){ return Vector2f(x,- sin(x)); });
あなたは[ 'ContextSettings'](https://www.sfml-dev.org/documentation/2.0/を経由して、ウィンドウのためにアンチエイリアス有効にしみましたstructsf_1_1ContextSettings.php)? –
あなたは「1」単位でプロットしています。曲線上のポイントを増やすには、小さい数字で増分してみてください。クイックテストとしてループを 'for(float x = -50.0f; x <50.0f; x + =。25f)'に変更することができます。 –
@SimonKraemer私はちょうど試したが効果がないようだ。 – billy606