二次ベジェ曲線の式。x0,y0は始点、x2,y2は終点、x1,y1は制御点。
線分の式。px,pyが始点、qx,qyが終点。
上記の式からtを消すと
ベジェ曲線の式を代入するとtの二次方程式になるので、解の公式で解くとtが求められる。
式が少々複雑だったので置き換え。
tが0から1のときに直線との交点を持つ。tを二次ベジェ曲線の式に戻して座標を得る。
線分と当たっているか求めたいので、直線との交点の座標が線分の範囲にあるか調べればOK。
二次ベジェ曲線の法線
当たった位置の法線は、二次ベジェ曲線の式をtで微分して接線を求め変形する。
法線が分かったら当たった時の反射する方向が求められる。
二次ベジェ曲線のバウンディングボックス
毎回、当たり判定するとコストが高いので、二次ベジェ曲線のバウンディングボックスを求めてまずはAABBと当たり判定をとる。
二次ベジェ曲線の座標の最大、最小を求めるには微分して0のときのtの値から求める。
上記を二次ベジェ曲線の式に代入するとxの極値が得られる。
yも同様にして求めたら、あとは始点、終点、極値の座標から最大値最小値を決めてAABBの左上の座標と右下の座標にすればいい。
コード
http://jsdo.it/sapphire_al2o3/RluP
広告
コメントを残す