凸四角形同士の転送ルーチン(2)
大まかなアルゴリズムについては前回(id:melpon:20061025)で書きました。
それをもうちょっと詰めて考えてみます。
前回みたいに、毎ループ交点を求めていたのでは結構なネックになってしまうので、ここを最適化することを考えてみます。
同じ直線と交差するループでは、転送先の Y の値が1つ増えたときの、転送先の X の増分、転送元の X,Y の増分をそれぞれ求めてやり、ループするたびにその増分を足してやれば、そこが交点になります。
まず、?の場所()での交点を求めます。そしてその交点から一番近い高さの点の位置(?)を求めます。
このとき、最初の点を、その交点から一番近い高さの点をとし、それに対応した転送元の点をそれぞれ、とすれば、が1増えたときの転送先 X、転送元 X,Y のそれぞれの増分は、
となり、これを使えば高速に交点を求めることが可能になります。
あとは同様にして、この転送先の X の値が一つ増えたときの、転送元の増分を計算して、毎ループその値を加算して転送してやります。
転送先の交点の位置をとし、転送元の交点の位置をとすれば、転送先の X が1増えたときの転送元 X,Y のそれぞれの増分は、
となり、この増分を毎ループ加算して転送すれば完成です。