プロが教える店舗&オフィスのセキュリティ対策術

WINDOWSプログラミングで
CreatePolygonRgnで多角形のリージョンを
つくるときに、

http://www.kumei.ne.jp/c_lang/sdk2/sdk_126.htm

にあるように、塗りつぶしモードがALTERNATEとWINDINGの2つあるのですが、
ALTERNATE:多角形の奇数番号の辺と偶数番号の辺の間を塗りつぶす
WINDING:ワインディング値(多角形を描画するペンがリージョンの周囲を回る回数)が0でないリージョンを塗りつぶす
という説明なんですが、意味がよくわからないでおります。

http://wisdom.sakura.ne.jp/system/winapi/win32/w …
に描画例があるのですが、なんでこういう図になるのかがわかりません。

多角形の奇数番号の辺と偶数番号の円の間とは、どんな領域になるのでしょうか。回る回数が0でないとは、どういう意味になるのでしょうか。

ご存知の方いましたら教えてください。よろしくお願いします。

A 回答 (2件)

まず、描画例の図を追跡しましょう。



【描画手順】

?5→→→→6
1→→→2?↓
↑↑??↓?↓
8↑←←↓←7
?4←←3

【走査手順】

?3→→→→4
12→→↓?↓
↑↑??↓?↓
A9←←6←5
?8←←7

(A=10です)

ずれて見にくいかもしれませんが、各数字が座標点です。
描画手順において、1>2>…7>8>1 の順で描画します。
これは一筆書きを1回したので塗りつぶすことが可能な多角図は
最低1回以上は始点と終点をたどってつなげますね。
これが0回抜きの意味です。

次に走査手順において、隣接して(直接つながって)いない辺は、
<奇数辺>
(1、2)と(3,4)と(5,6)と(7,8)と(9、A)
<偶数辺>
(2,3)と(4,5)と(6,7)と(8,9)と(A,1)

奇数辺*偶数辺の四角短形を仮想的に作り、内部合成部分を抜きます。
(1,2,3)・・範囲外
(3,4,5)・・(3>4>5>9>3)-(2>6>9>2)
(5,6,7)・・範囲外
(7,8,9)・・(7>8>9>6>7)(抜く合成部分なし)
(9、A、1)・・(1>2>9>A>1)(抜く合成部分なし)
これらを塗りつぶすのが、ALTERNATEモードです。
WINDINGモードは合成部分も塗りつぶしますが、
描画手順で、(1>2>7>6>5…)のように向かい合う辺
の線画方向が同一だと描画されないと言うことです。

かなり昔やったことなのでおぼろげですが、たぶん合ってると
思います。
    • good
    • 0
この回答へのお礼

丁寧なご回答、ありがとうございました。どちらも大変明瞭で、助かりましたが、こちらを次点として、締め切りさせていただきます。ありがとうございました。

お礼日時:2007/06/18 09:17

閉曲線 (多角形など) を塗りつぶすには,当然ながら内部と外部を区別する必要があります.


閉曲線が単純 (辺同士が交差・接触しない) ならば,その内部と外部の区別は自明ですが,
単純でない場合はあいまいになる場合があります.

ALTERNATE と WINDING はどちらも,閉曲線の内部と外部を区別 (定義) するための規則です.


●ALTERNATE (交互)

(図が崩れているので,テキストエディタにコピー&ペーストして固定幅フォントで見てください.)

     ┏━━━━━━━━━━━━━━━━━┓
     ┃ Y               ┃
     ┃ ┏━━━┓   ┏━━┓    ┃
 L   ┃ ┃ P ┃   ┃  ┃    ┃
─────╂─╂─・ ┃   ┃  ┃    ┃C
     ┃ ┃   ┃   ┃  ┃    ┃
    W┗━╋━━━┛X  ┃  ┃    ┃
       ┃       ┃  ┃    ┃
       ┗━━━━━━━┛  ┃    ┃
       Z          ┃    ┃
                  ┗━━━━┛

ある点Pが閉曲線Cの内部にあるかどうかを判定したい場合,Pから無限遠に半直線Lを引き,
それがCと何回交差するかを数えます.奇数回ならばPはCの内部,偶数回ならば外部にある
と定義します.上の図の場合は2回なので,PはCの外部ということになります.

点が多角形の内部にある?
http://bal4u.dip.jp/mt/program/archives/2004/11/ …


●WINDING (巻)

閉曲線C上の点QがCを1周するとき,点Pのまわりを何回回るかにより内外を定義する方法.

(1) Pが単純閉曲線Cの内部にある場合

  ┏━━━━━┓C
  ┃  P  ┃
  ┃  ・  ┃
  ┃     ・Q
  ┗━━━━━┛

  QがCを1周すると,Pのまわりを1回回る.


(2) Pが閉曲線Cの「明らかに」外部にある場合

  ┏━━━━━━━┓C
  ┃ ┏━━━┓ ┃
  ┃ ┃   ┃ ・Q
  ┗━┛   ┃ ┃         ・P
     ┏━━╋━┛
     ┃  ┃
     ┗━━┛

  QがCを何周しようが,Pからみれば8時の方向と10時の方向の間をウロウロするだけで,
  Pの回りを1周もすることはない.つまり巻数は0回.

そこでPの回りを1周以上するとき内部と定義すれば,最初の ALTERNATE の図のPは

・多角形を描く順序が W→X→Y→Z (あるいはその逆) の場合:巻数は2なので内部.
・多角形を描く順序が W→Y→X→Z (あるいはその逆) の場合:巻数は0なので外部.
    • good
    • 0
この回答へのお礼

なるほど、これで理解しました。ありがとうございました。

お礼日時:2007/06/18 09:16

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!