ページ 11

x軸に対応するベジェ曲線から得られたy軸の値について

Posted: 2016年9月26日(月) 18:45
by ストロボ・エッジ
ゲームプログラムにおいて、ベジェ曲線を応用してパラメータ遷移を実装しようと考えております。
そこでx軸をレベル、y軸をパラメータ値とし、以下のような座標群のもと二項定理を解きました。

  要素1 要素2 要素3 要素4 要素5
x   0    25    50    75   100
y   0    128   128   128   255

係数k = { 1, 4, 6, 4, 1 }

x = (a,b)^5 = Σ ( k_i * a^(n-1-i) * b^i * x_i )
y = (a,b)^5 = Σ ( k_i * a^(n-1-i) * b^i * y_i )

得られた値に沿って描いたベジェ曲線が添付画像になります。

画像

ここまでは良いのですが・・・

計算すべき値が(x,y)の両方であるという点に納得が行かず困っております。

本来であれば横軸をレベル(0~100)、縦軸をパラメータ(0~255)とし、
パラメータyの計算のみを行えると良いのですが、y軸のみを計算するとなると
理想の曲線にならないようです。

添付画像では、横軸を計算したxの値、縦軸を計算したパラメータ値としているため
理想の形にはなるのですが、横軸が指す値は本来Lvであって欲しいと考えています。

計算した(x,y)の値を統合してy値のみを得るにはどうしたらよろしいでしょうか?
数学知識が殆ど皆無でして、とても説明し難いのですが・・・

詳しい方が居ましたら何卒ご指導願います。

Re: x軸に対応するベジェ曲線から得られたy軸の値について

Posted: 2016年9月27日(火) 16:39
by たんぽぽ
チラッとベジェ曲線についてググってみての感想ですので参考までに。

x方向についても計算しなければならないのはx方向への伸びが不均一だからと思います。
端的な例としては不均一なゴムを引っ張った例でしょうか。細いところは更に細くなりますが太いところは太いままでしょう。

ベジェ曲線を媒介変数表示から直すのはたぶん無理かと思います。少なくとも簡便な表示にはならないでしょう。
理由としてはxとyの扱いが全く同じなので、単調増加でない関数x=f(y)を考えるとy=aになる点が複数あり、そこがネックです。
ベジェ曲線ではx=aとなるような点が複数ある線も表現できてしまうということです。
方程式の解についてはライブラリがあるようなのでそこでxの値に対するtを求めるのが一番だと思います。

とはいえあなたが想定しているベジェ曲線の使い道はだいぶ限定されていると思いますので、調べたり考えたりすればx=に直せるかもしれません。

Re: x軸に対応するベジェ曲線から得られたy軸の値について

Posted: 2016年9月27日(火) 23:05
by みけCAT
(x, y) = (X(t), Y(t))と表され、X(t)がtに対して単調増加なのであれば、
x (=X(t))から二分探索でtを求め、そのtを用いてy (=Y(t))を求める、というのはどうですか?


なんかa,bの2パラメータある…?
俺の知っているベジェ曲線と違う…?

Re: x軸に対応するベジェ曲線から得られたy軸の値について

Posted: 2016年9月28日(水) 14:47
by Idra
ベジェ曲線は媒介変数を使った表現ですから、xとyの両方を計算する必要があります。
(媒介変数を横軸や時間だと勘違いするのは誰しも一度はやる失敗かと)
もしy=f(x)の形にしたいということであれば、初めからそういう関数を作るか、
ベジェ曲線を一度折れ線に変換してしまって値を求めればいいですよ。