検索
AND検索
OR検索
トップ
|
リロード
|
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
多角形の内外判定 をテンプレートにして作成
メニュー
簡易掲示板
LINK集
y.tackの公式BBSブックマーク
practice room
?
最新の20件
2022-10-09
多角形の内外判定
2021-05-19
RecentDeleted
2018-08-01
FrontPage
文字列型変数管理サブルーチン
GAME作成システム
2018-07-31
double型変数管理サブルーチン
int型変数管理サブルーチン
2018-07-21
GUIとメイン分割処理。たたき台2
2018-07-11
memo
NO_579_sample
GUIとメイン分割処理。たたき台
2018-06-28
NO_714
NO_712
NO_706
NO_705
NO_704
NO_703
NO_702
2018-06-23
Shift_JIS
モートン番号テーブル化 / 八分木
total
0
today
0
yesterday
0
now
1
Menu
Total:0/Today:0
開始行:
*多角形の内外判定 [#tb03a432]
以下のページを参考にしました。 ~
[[点の多角形に対する内外判定>https://www.nttpc.co.jp/tech...
単純に実装すると、点が線分上にある場合、図形の向きで結果...
例を挙げます、次の図を見てください~
┏━━━━━━━━━━━━┓~
┃ /┃~
┃ / ┃~
┃ / ┃~
┃ A / ┃~
┃ ・ ┃~
┃ / ┃~
┃ / ┃~
┃ / ┃~
┃ / ┃~
┃ / B ┃~
┃ / ┃~
┃/ ┃~
┗━━━━━━━━━━━━┛~
↑AとBで結果が逆になる。~
参考にしたページではそういう仕様で進めているようですが、(...
直感的には線分上は当たりとするか、~
完全に図形に入り込んでいるときのみ当たりにするかのどちら...
今回は、線分上に点がある場合は当たりとする処理にしていま...
**ソース [#i25eba58]
#module
//polygonは実数または整数の配列
#defcfunc 多角形内外判定 array polygon, int 頂点数, doub...
count = 0
a_max = 頂点数 * 2
for i,, a_max, 2
始点 = polygon(i), polygon(i + 1)
終点 = polygon((i + 2) \ a_max), polygon((i + 3) \ a_max)
if 始点 != 終点{
判定 = (x - 始点) * (終点.1 - 始点.1) / (終点 - 始点) ...
}else{
判定 = (x != 始点) || ((y - 始点.1) * (y - 終点.1) > 0)
}
if 判定 < 0{
if x < 始点 ^ x < 終点{
if 始点 < 終点{
count++
}else{
count--
}
}
}else: if 判定 == 0{
//点が線分上にある時
return 1
}
next
return count != 0
#global
#include "a2d.hsp"
alcreateImage
title "多角形内外判定"
repeat
stick key
if key & 256{
a(頂点数 * 2) = mousex, mousey
頂点数++
}
if key & 512{
頂点数 = limit(頂点数 - 1, 0)
}
判定結果 = 多角形内外判定(a, 頂点数, mousex, mousey)
redraw 2
alColor 240,240,240
alFillRect 0,0,640,480
alColor 0,0,0
if 判定結果: alColor 200,100,50
alFillPoly a, 頂点数
alColor 50,130,30
alDrawPoly a, 頂点数
alCopyImagetoScreen
pos 0, 0
color
mes "左クリック: 頂点を作成
mes "右クリック: 最後に作成した頂点を削除
mes ""+mousex+","+mousey + " : " + 判定結果
redraw
await 16
loop
終了行:
*多角形の内外判定 [#tb03a432]
以下のページを参考にしました。 ~
[[点の多角形に対する内外判定>https://www.nttpc.co.jp/tech...
単純に実装すると、点が線分上にある場合、図形の向きで結果...
例を挙げます、次の図を見てください~
┏━━━━━━━━━━━━┓~
┃ /┃~
┃ / ┃~
┃ / ┃~
┃ A / ┃~
┃ ・ ┃~
┃ / ┃~
┃ / ┃~
┃ / ┃~
┃ / ┃~
┃ / B ┃~
┃ / ┃~
┃/ ┃~
┗━━━━━━━━━━━━┛~
↑AとBで結果が逆になる。~
参考にしたページではそういう仕様で進めているようですが、(...
直感的には線分上は当たりとするか、~
完全に図形に入り込んでいるときのみ当たりにするかのどちら...
今回は、線分上に点がある場合は当たりとする処理にしていま...
**ソース [#i25eba58]
#module
//polygonは実数または整数の配列
#defcfunc 多角形内外判定 array polygon, int 頂点数, doub...
count = 0
a_max = 頂点数 * 2
for i,, a_max, 2
始点 = polygon(i), polygon(i + 1)
終点 = polygon((i + 2) \ a_max), polygon((i + 3) \ a_max)
if 始点 != 終点{
判定 = (x - 始点) * (終点.1 - 始点.1) / (終点 - 始点) ...
}else{
判定 = (x != 始点) || ((y - 始点.1) * (y - 終点.1) > 0)
}
if 判定 < 0{
if x < 始点 ^ x < 終点{
if 始点 < 終点{
count++
}else{
count--
}
}
}else: if 判定 == 0{
//点が線分上にある時
return 1
}
next
return count != 0
#global
#include "a2d.hsp"
alcreateImage
title "多角形内外判定"
repeat
stick key
if key & 256{
a(頂点数 * 2) = mousex, mousey
頂点数++
}
if key & 512{
頂点数 = limit(頂点数 - 1, 0)
}
判定結果 = 多角形内外判定(a, 頂点数, mousex, mousey)
redraw 2
alColor 240,240,240
alFillRect 0,0,640,480
alColor 0,0,0
if 判定結果: alColor 200,100,50
alFillPoly a, 頂点数
alColor 50,130,30
alDrawPoly a, 頂点数
alCopyImagetoScreen
pos 0, 0
color
mes "左クリック: 頂点を作成
mes "右クリック: 最後に作成した頂点を削除
mes ""+mousex+","+mousey + " : " + 判定結果
redraw
await 16
loop
ページ名: