合計 昨日 今日

アバター
Dixq (管理人)
管理人
 
記事: 1373
登録日時: 2010年10月12日(火) 20:16
お住まい: 北海道札幌市
日記: 日記を見る (537)
日記
- 3月 2017
DXライブラリAndroid版を使ったベンチマーク公開 (3)
   2017年3月29日(水) 00:18
本HPに新しいコンテンツ追加 (4)
   2017年3月28日(火) 23:36
モベリオアプリ開発で出来ることを増やすテクニック (2)
   2017年3月27日(月) 22:24
スマホに消せない広告が入り込んだ・・ (4)
   2017年3月20日(月) 19:14
【祝】4000万アクセス (2)
   2017年3月20日(月) 18:02
ARナビ作ってみた [Android/Moverio]ストア公開中 (0)
   2017年3月19日(日) 14:14
DXライブラリが神アプデ!Android対応に!! (2)
   2017年3月09日(木) 23:57
スマホで広告が出ないようにしました (6)
   2017年3月09日(木) 00:08
念願のプレステ4! (3)
   2017年3月04日(土) 23:33
分かる人いる? (4)
   2017年3月03日(金) 20:45
あたったあああ!!! (7)
   2017年3月01日(水) 21:39

+ 2月 2017
+ 1月 2017
+ 12月 2016
+ 11月 2016
+ 10月 2016
+ 9月 2016
+ 8月 2016
+ 7月 2016
+ 6月 2016
+ 5月 2016
+ 4月 2016
+ 3月 2016
+ 2月 2016
+ 1月 2016
+ 12月 2015
+ 11月 2015
+ 10月 2015
+ 9月 2015
+ 8月 2015
+ 7月 2015
+ 6月 2015
+ 5月 2015
+ 4月 2015
+ 3月 2015
+ 2月 2015
+ 1月 2015
+ 12月 2014
+ 11月 2014
+ 10月 2014
+ 9月 2014
+ 8月 2014
+ 7月 2014
+ 6月 2014
+ 5月 2014
+ 4月 2014
+ 3月 2014
+ 2月 2014
+ 1月 2014
+ 12月 2013
+ 11月 2013
+ 10月 2013
+ 9月 2013
+ 8月 2013
+ 7月 2013
+ 6月 2013
+ 5月 2013
+ 4月 2013
+ 3月 2013
+ 2月 2013
+ 1月 2013
+ 12月 2012
+ 11月 2012
+ 10月 2012
+ 9月 2012
+ 8月 2012
+ 7月 2012
+ 6月 2012
+ 5月 2012
+ 4月 2012
+ 3月 2012
+ 2月 2012
+ 1月 2012
+ 12月 2011
+ 11月 2011
+ 10月 2011
+ 9月 2011
+ 8月 2011
+ 7月 2011
+ 6月 2011
+ 5月 2011
+ 4月 2011
+ 3月 2011
+ 2月 2011
+ 1月 2011
+ 12月 2010
+ 11月 2010
+ 10月 2010
フォロー
カテゴリー
日常
1 記事

ベジェ曲線とな

パーマリンクby Dixq (管理人) on 2011年10月27日(木) 23:48

STGを作る人なら一度は聞いたことあるこの曲線。
滑らかな線を描く時によく使われますが、私はよく物体の動作に使ってます。

ベジェ曲線を知らない人はwikiをどうぞ
http://ja.wikipedia.org/wiki/%E3%83%99% ... 2%E7%B7%9A

このベジェ曲線を簡単に使えるクラスを作ってみました。

http://dixq.net/zip/blog/Bezier.zip

定義値である
#define X1とY1がP1
#define X2とY2がP2
を示しています。0~1の値をセットして、変更して実行してみると関係が良く分かります。
以下、いくつか試してみました。



これって二次元平面上を移動する時にも使えますが、私はモーションを徐々にブレンドしたり、
サッと動き始めて徐々に止まるなんて時に使ってます。
動画の最後を見て頂ければ分かりますが、y成分はxに関係なく決まるんですよね。
この値をブレンド率などに適用してやれば、sin波を使った滑らかな遷移のようなことが出来ます。

画像

βスプライン等と違って2点に依存するので、「動き初めは早く、動き終りは遅く」なんてことが可能です。

作ったクラスはtが時間で0から1まで変化する時

Bezier.Get( x1, y1, x2, y2, t );

みたいな感じで渡せばその時の座標を返してくれますが、このままではsin波を使った滑らかな遷移のような適用には適しません。
そこで

Bezier.Get( 動き初めは速く, 動き終りはゆっくり, モーション時刻 );

みたいな使い方が出来るようにしてみました。

float Get( ePrm_t ePrm1, ePrm_t ePrm2, float fRate );

と書いているのがそれです。コードを載せると長くなるので、ご覧になりたい方は配布コードをご覧ください。
最後にコメントアウトしているコードをループ内に移してもらえれば、それが確認出来ます。

しかし、本当はベジェよりもっとキツイカーブを描く曲線を作りたいんですよね・・。
今の実行結果って精一杯引っ張ってもせいぜいS字にしかならないですが、「直角なんじゃない?」って位まで大袈裟にカーブする曲線が作りたい・・。
もっとカーブ具合のパラメータがいじれる計算式ってないんでしょうかね~。
最後に編集したユーザー Dixq (管理人) [ 2011年10月27日(木) 23:54 ], 累計 3 回

コメント数: 5 閲覧数: 24528
コメント

Re: ベジェ曲線とな

パーマリンクby bitter_fox on 2011年10月28日(金) 00:33

1.png
1.png (5.21 KB) 表示数: 506 回

これでもまだまだ~って感じですか?
添付ファイル
アバター
bitter_fox
 
記事: 607
登録日時: 2010年11月25日(木) 20:25
お住まい: 大阪府
日記: 日記を見る (8)

Re: ベジェ曲線とな

パーマリンクby Dixq (管理人) on 2011年10月28日(金) 00:37

おぉ、これはどういう計算を?
アバター
Dixq (管理人)
管理人
 
記事: 1373
登録日時: 2010年10月12日(火) 20:16
お住まい: 北海道札幌市
日記: 日記を見る (537)

Re: ベジェ曲線とな

パーマリンクby Dixq (管理人) on 2011年10月28日(金) 00:45

2点重ねたベジェ曲線を引っくり返してもう一つくっつけた曲線か・・。
まぁ可能と言えば可能ですねぇ。
4次式、5次式のベジェ曲線みたいなんとか探せばいいのかな?あるのか知らないけど・・。

追記:
nissyさんより、ベジェ曲線はN - 1 次曲線だとご指摘頂きました。
普通に四次式にすればいいだけ・・?
ちと明日高次式で計算して試してみます~。

追記:
無事できました~!
nissyさんありがとうございました~!

↓6次方程式でやるとかなり直角っぽくなりました。
画像
最後に編集したユーザー Dixq (管理人) [ 2011年10月28日(金) 01:25 ], 累計 4 回
アバター
Dixq (管理人)
管理人
 
記事: 1373
登録日時: 2010年10月12日(火) 20:16
お住まい: 北海道札幌市
日記: 日記を見る (537)

Re: ベジェ曲線とな

パーマリンクby bitter_fox on 2011年10月28日(金) 01:30

おー、あれ6次だったんですか。ベジェ曲線って面白い曲線ですね。
アバター
bitter_fox
 
記事: 607
登録日時: 2010年11月25日(木) 20:25
お住まい: 大阪府
日記: 日記を見る (8)

Re: ベジェ曲線とな

パーマリンクby Dixq (管理人) on 2011年11月05日(土) 00:06

面白いですよね!
アバター
Dixq (管理人)
管理人
 
記事: 1373
登録日時: 2010年10月12日(火) 20:16
お住まい: 北海道札幌市
日記: 日記を見る (537)

オンラインデータ

登録ユーザー: みけCAT