では、順を追ってみましょう。
まず最初に、直線を登録(setLine)しているので、
こっから、頂点と交点、即ち、直線の始点/終点/直線同士の交点を求めます。
交点の求め方とかは、ここらへんを参考にどうぞ。
そして、今度はそのY座標だけをArrayに入れて、SORTしてみます。
そうすると、こういう結果になります。
# 0 : 20.0000 - 10.0000 # 1 : 40.0000 - 10.0000 # 2 : 60.0000 - 20.0000 # 3 : 36.3636 - 20.9091 # 4 : 50.0000 - 30.0000 # 5 : 10.0000 - 40.0000 # 6 : 30.0000 - 40.0000 # 7 : 60.0000 - 40.0000 # 8 : 45.0000 - 40.0000 # 9 : 40.0000 - 50.0000
# 0 : 10.0000 # 1 : 20.0000 # 2 : 20.9091 # 3 : 30.0000 # 4 : 40.0000 # 5 : 50.0000
図で言えば、こういうことです。
ここで、Y座標は6コあることがわかります。
このY座標で水平な線を引き、
全ての登録した直線に対して、その直線で分割してしまいます。
ただし、水平な線は含みません。
ようするに、こういうことです。
データにすると、こういうふうになっています。
ここで、いくつかの値を一緒に登録しています。
(1)【tag】。分断する前の直線を一意に識別するための番号。
(2)【bup】。直線が、上を向いているか(終点のY座標>始点のY場表)どうか。
(3)【hnum】。その直線が、どの段(直線の中点がどのY座標の間にあるか)にあるか。
※全て、あとで使います。
# 0 tag:1 bup:1 bHz:0 hnum:1 x1:20.0 y1:10.0 x2:16.7 y2:20.0 x:18.3 y:15.0 # 1 tag:4 bup:0 bHz:0 hnum:1 x1:35.0 y1:20.0 x2:20.0 y2:10.0 x:27.5 y:15.0 # 2 tag:5 bup:1 bHz:0 hnum:1 x1:40.0 y1:10.0 x2:36.7 y2:20.0 x:38.3 y:15.0 # 3 tag:8 bup:0 bHz:0 hnum:1 x1:60.0 y1:20.0 x2:40.0 y2:10.0 x:50.0 y:15.0 # 4 tag:1 bup:1 bHz:0 hnum:2 x1:16.7 y1:20.0 x2:16.4 y2:20.9 x:16.5 y:20.5 # 5 tag:4 bup:0 bHz:0 hnum:2 x1:36.4 y1:20.9 x2:35.0 y2:20.0 x:35.7 y:20.5 # 6 tag:5 bup:1 bHz:0 hnum:2 x1:36.7 y1:20.0 x2:36.4 y2:20.9 x:36.5 y:20.5 # 7 tag:7 bup:0 bHz:0 hnum:2 x1:60.0 y1:20.9 x2:60.0 y2:20.0 x:60.0 y:20.5 # 8 tag:1 bup:1 bHz:0 hnum:3 x1:16.4 y1:20.9 x2:13.3 y2:30.0 x:14.8 y:25.5 # 9 tag:5 bup:1 bHz:0 hnum:3 x1:36.4 y1:20.9 x2:33.3 y2:30.0 x:34.8 y:25.5 # 10 tag:4 bup:0 bHz:0 hnum:3 x1:50.0 y1:30.0 x2:36.4 y2:20.9 x:43.2 y:25.5 # 11 tag:7 bup:0 bHz:0 hnum:3 x1:60.0 y1:30.0 x2:60.0 y2:20.9 x:60.0 y:25.5 # 12 tag:1 bup:1 bHz:0 hnum:4 x1:13.3 y1:30.0 x2:10.0 y2:40.0 x:11.7 y:35.0 # 13 tag:5 bup:1 bHz:0 hnum:4 x1:33.3 y1:30.0 x2:30.0 y2:40.0 x:31.7 y:35.0 # 14 tag:3 bup:0 bHz:0 hnum:4 x1:45.0 y1:40.0 x2:50.0 y2:30.0 x:47.5 y:35.0 # 15 tag:7 bup:0 bHz:0 hnum:4 x1:60.0 y1:40.0 x2:60.0 y2:30.0 x:60.0 y:35.0 # 16 tag:2 bup:1 bHz:0 hnum:5 x1:10.0 y1:40.0 x2:40.0 y2:50.0 x:25.0 y:45.0 # 17 tag:3 bup:0 bHz:0 hnum:5 x1:40.0 y1:50.0 x2:45.0 y2:40.0 x:42.5 y:45.0
これで、準備が整いました。
これから、ANDとかORの演算をすることになります。
次回につづきますが、きっと、ちょっとわかる人は、この図を見ればわかります。
つづく。
0 件のコメント:
コメントを投稿