凸四角形同士の転送ルーチン

凸四角形同士の転送ルーチンは、id:melpon:20061023 の回転拡大縮小ルーチンと同じように、スキャンラインを求めて移動させてやればいけそう。


まず最初に考えたのが、転送元と転送先の四角形ABCD を同時にスキャンしていく方法。

汚くてすんません(;´Д`)
しかしこれだと、転送先に描画済みのピクセルに対して新しいピクセルが上書きされたり、ある点がスキャンされずにピクセルが描画されなかったりするので、うまくいきそうにないです。


なので、転送先のスキャンラインは常に横方向で、そこから転送元のスキャンラインを求めてやることにします。

ある転送先スキャンラインと交差する線はBCDAで、それぞれの交点をP,Qとします。
この転送はBP:CP=BP':CP'AQ:DQ=AQ':DQ'にならないといけないという点から、転送元スキャンラインP'Q'が求まります。
で、このスキャンラインを動かして転送。
プログラム的にはこのスキャンラインを求めるのがネックになってくるわけですが、次のループも同じ直線と交差するというのが分かっていれば、両方のスキャンラインに1ライン分の増分を足すだけで良さそうです。


これを転送先のライン全てに行えば、凸四角形同士の転送は出来そう?
というかこれ、凸多角形同士の転送が出来そうだなぁ……。