画面外に出る曲線を検出する
ベジェ曲線は、実際には単なる多項式です。曲線のさまざまな次数に対応して、複数のタイプのベジェ曲線があります。
したがって、生成された方程式(1つは、、x
もう1つはy
)を取り、根(0を通過する点)を見つけます。根が存在する場合、曲線は軸を通過します。
たとえば、2次(次数= 2)ベジェ曲線の場合、3つの点(x 0、y 0)、(x 1、y 1)、(x 2、y 2)が与えられると、方程式は次のようになります。
x(t)=(x 0-2x 1 + x 2)t 2-2(x 0 + x 1)t + x 0 y
(t)=(y 0-2y 1 + y 2)t 2-2( y 0 + y 1)t + y 0
0 <= t <= 1
この時点で、2次方程式を使用してを解きt
、解が存在しないか、[0,1]
forのドメイン外にあることを確認できますt
。ただし、複雑な3次方程式に触れることなく、3次ベジェ曲線を一般化する別の方法があります。極値点を確認するだけです。これらは、導関数=0のポイントです。導関数は
x'(t)= 2(x 0-2x 1 + x 2)t-2(x 0 + x 1)
y'(t)= 2(y 0-2y 1 + y 2)t-2(y 0 + y 1)
これは、極値が
t極値-x =(x 0 + x 1)/(x 0-2x 1 + x 2)
t極値-y =(y 0 + y 1)/(y 0-2y 1 + y 2)
したがって、x(t extrema-x)> 0およびy(t extrema-y)> 0 であることを確認してください(端点x0およびx2が画面上にあることがわかっていることを前提としています) 。三次ベジェ曲線の場合も同じことを行いますが、二次方程式を使用して極値を解きます(それぞれに2つの極値がx
ありy
、その場合)。
カーブが画面外に出るのを防ぎます
上記の方程式をtextrema-xについて取り、それをx(t)に差し込むことによって、x(t extrema-x)> 0を解くと、少し代数の後で、x軸と交差しないようにすることがわかります。必要
-4x 0 x 1 + x 0 x 2 -x 1 2 > 0 if(x 0 + x 2)> 2x 1
-4x 0 x 1 + x 0 x 2 -x 1 2 <0 if(x 0 + x 2)<2x 1
((x 0 + x 2 ) = 2x 1の場合、 x0からx2まで直線的に移動しているため、両方が正であると仮定すると、x軸を横切ることはできません)
これらの方程式を少し見つめると、(x 0 + x 2)> 2x 1の場合、左側の条件が満たされるまでx1を単純に減らすことができることがわかります。(x 0 + x 2)<2x 1の場合、条件が満たされるまでx1を増やすことができます。の方程式y
は類似しています。
これは、曲線が画面の左(x=0
)と上(y=0
)の部分から外れるのを防ぐ方法を示しています-右(x=screen_width
)と下(y=screen_height
)はどうですか?
これは、画面を鏡像に反転していることを想像することで簡単に行うことができます。つまり、右側がx=0
で、左側がですx=screen_width
。これは、上記のすべての方程式でのすべてのインスタンスをに置き換え、条件を確認するx
ことで実行できます。(screen_width-x)
次に、たとえば、前に最初のケースでx 1を減らした場合、この場合は(screen_width-x 1)を減らします。これは、x1を増やすのと同じです。同じロジックが。に置き換える場合にも当てはまります。y
(screen_height-y)