
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でないとは、どういう意味になるのでしょうか。
ご存知の方いましたら教えてください。よろしくお願いします。
No.2ベストアンサー
- 回答日時:
閉曲線 (多角形など) を塗りつぶすには,当然ながら内部と外部を区別する必要があります.
閉曲線が単純 (辺同士が交差・接触しない) ならば,その内部と外部の区別は自明ですが,
単純でない場合はあいまいになる場合があります.
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なので外部.
No.1
- 回答日時:
まず、描画例の図を追跡しましょう。
【描画手順】
?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…)のように向かい合う辺
の線画方向が同一だと描画されないと言うことです。
かなり昔やったことなのでおぼろげですが、たぶん合ってると
思います。
丁寧なご回答、ありがとうございました。どちらも大変明瞭で、助かりましたが、こちらを次点として、締め切りさせていただきます。ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- ノートパソコン Open Office.orgのDrawで描いた図形の塗りつぶしをしたい 1 2022/03/22 19:24
- 数学 『弧は弦より長し』 8 2022/04/18 10:23
- 数学 画像の中学2年生の数学の問題について教えていただきたいです。 三角形ADCが二等辺三角形であることと 2 2023/01/29 16:14
- 数学 複素数平面についての問題です。 2点α、βが定められており、それらともう1点γと結ぶ三角形が直角二等 6 2023/06/30 09:47
- 数学 三角比の相互関係「sinA^2+cosA^2=1」が直角でなくても成り立つ理由について。 これは、三 8 2022/03/31 09:22
- 数学 数学Aの組み合わせの問題で、右の図のように、正方形を各辺の中点で結んで5つの領域に分ける。隣り合った 4 2023/08/10 09:15
- 仕事術・業務効率化 マークシートの番号を塗りつぶす時に、ミスって違う番号に塗りつぶしてしまうことがあるのですが、間違えず 3 2022/07/20 09:45
- 数学 数学B 私の回答はあっていますか? A(1,3), B(2,5), C(6,8), D(5,6), 8 2022/05/22 00:55
- Excel(エクセル) エクセルの値を元に図形の色を変えたい 2 2022/05/11 01:37
- 数学 高校一年生です。 数学で分からない単元があるので教えて欲しいです。単元は命題の真偽です。 出た課題の 4 2023/08/18 16:30
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Minecraft 統合版(PC)の描画距...
-
[VB.net] DataGridViewの列ヘッ...
-
TextBoxに文字を書いても表示さ...
-
NVIDIAのシェーダーキャッシュ
-
win32api 画面のちらつき
-
OpenGLでの描画のタイミング
-
Windowのちらつき防止
-
VBAにGDI+を参照させる方法
-
文字の行間
-
Spreadで表全体を選択した場合...
-
MFCのタイマーのつかい方を教え...
-
MFCでOnPaintのタイミング
-
ブレゼンハムのアルゴリズムに...
-
非クライアント領域への描画に...
-
VC++プログラムをつかったBMP画...
-
C# ラバーバンドの描画を快適に...
-
ClistBoxでオーナードローがよ...
-
Form1 Load で実行されない。
-
ダイアログボックスについて。
-
pset関数について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Minecraft 統合版(PC)の描画距...
-
[VB.net] DataGridViewの列ヘッ...
-
word
-
TextBoxに文字を書いても表示さ...
-
VB6,リストボックスの特定行の...
-
NVIDIAのシェーダーキャッシュ
-
MFCでOnPaintのタイミング
-
panelのスクロール表示について
-
VC++プログラムをつかったBMP画...
-
Labelの文字をスクロールする際...
-
UpdateData( FALSE); による文...
-
VBAにGDI+を参照させる方法
-
CStaticコントロールの静的イメ...
-
FlexGridの一部のみ表示を更新...
-
Form1 Load で実行されない。
-
VB.netでのライン描画方法がわ...
-
重いグラフィックス処理
-
InvalidateRectの使い方について
-
SHGetFileInfoでアイコンが取得...
-
OneNote 2010 文字と描画がずれる
おすすめ情報