• ベストアンサー

物体が往復する動きを作りたい

ある物体が中央から上に移動し、中央に戻り、下に移動し中央に戻るまでを1周期とした関数を作りたいのですが、時間(0~1)を渡して移動量(-1~1)を得る式はどのようにすればいいのでしょうか? 数学で言う三角波に近いグラフになると思います。 現状は時間を4分割してそれぞれを1次関数として動かしていますが あまりいい方法ではないので別の方法を探しています。 使用言語は特に問いません。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

#1の回答 double w=fmod(x,4*T); ではなくて double w=4*fmod(x/T,1.0); でした。これで周期Tの繰り返しになります。横軸がx<=Tのときだけでよいのなら double w=4*x/T; でかまいません。

django13
質問者

お礼

教えていた方法で目的の動作ができました。 周期を繰り返す方の式を使わせていただきました。 ありがとうございます。

その他の回答 (3)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.4

正直な話, 現状で何に不満なのかが分からない. 何がどう「あまりいい方法ではない」のでしょうか? なぜ 4分割するのかはよくわからんが.

django13
質問者

補足

ここに公開するに値しないほど回りくどい方法で実装していたという意味です。 その方法よりも簡潔に書きたかったのです。

  • neKo_deux
  • ベストアンサー率44% (5541/12319)
回答No.2

単振動になって良いのなら、 移動量=sin(時間/(2*π)) とか。

django13
質問者

お礼

回答有難うございます。 今回は等速な動きをするように作ろうと考えています。

回答No.1

c++で、四則演算と標準関数だけ(std::は省いています)を使うことにして、 double w=fmod(x,4*T); y=min(abs(w+1),abs(w-3))-1;

関連するQ&A

専門家に質問してみよう