
A 回答 (4件)
- 最新から表示
- 回答順に表示
No.4
- 回答日時:
一つの座標点の内外判定に、Winding Number Algorithm と呼ばれる方法があります。
これを折れ線近似した線分の節点に順次適用すれば、ある程度の判定は可能です。
ただし、前後の節点を結ぶ線の一部が図形の外に出る可能性があるので、厳密ではありません。
経路に沿った節点(時系列に得られる経路の各時点での位置、線分を折れ線近似した各節点など)が多角形で表された図形の内か外かを判定する方法を、下記に示します。
水平右向きをx軸、垂直上向きをy軸とする。
図形は多角形polygonで表す。
節点nodeから右側に引いた水平線と多角形の各辺との交差状況に基づき、下記のルールで内外判定を行う。
ルール1. 上向きの辺は、開始点を含み終点を含まない。
ルール2. 下向きの辺は、開始点を含まず終点を含む。
ルール3. 水平線と辺の交点は、節点の右側になくてはならない。
ルール4. 上向きの辺と交差する場合、+1する。
ルール5. 下向きの辺と交差する場合、-1する。
下記urlの[座標点の図形内外判定(Excel)]にサンプルを載せています。
http://sxs.html.xdomain.jp/che/index.html
Sub Inoutjudg()
' Inoutjudg(Args(1), Args(2), Args(3))
'線分と多角形の内外判定(Winding Number Algorithm)
' Args(1) = polygon:入力、多角形節点テーブル
' Args(2) = node :入力、線分節点テーブル
' Args(3) = result :出力、判定結果テーブル
Dim i, k As Integer
Dim np, nn As Integer
Dim polygon() As Double
Dim node() As Double
Dim result() As Double
Dim cfx As Double
'データ入力
np = Args(1).rowCount ' 多角形節点数
nn = Args(2).rowCount ' 線分節点数
ReDim polygon(np, 2) As Double
ReDim node(nn, 2) As Double
ReDim result(nn) As Double
Range("A1").Cells(Args(1).row, Args(1).Column).Select
For i = 1 To np
polygon(i, 1) = Selection.Cells(i, 1).Value
polygon(i, 2) = Selection.Cells(i, 2).Value
Next i
Range("A1").Cells(Args(2).row, Args(2).Column).Select
For i = 1 To nn
node(i, 1) = Selection.Cells(i, 1).Value
node(i, 2) = Selection.Cells(i, 2).Value
Next i
Range("A1").Cells(Args(3).row, Args(3).Column).Select '判定結果の出力セルの準備
For k = 1 To nn
result(k) = 0
For i = 1 To np - 1
'上向きの辺の処理
'y軸方向について、節点が始点と終点の間にある。ただし、終点は含まない。(ルール1)
If ((polygon(i, 2) <= node(k, 2)) And (node(k, 2) < polygon(i + 1, 2))) Then
'節点と同じ高さになる辺の位置におけるxの値を求め、辺が節点の右か左か判定する。
'辺は節点よりも右側にある。(ルール3)
cfx = (node(k, 2) - polygon(i, 2)) / (polygon(i + 1, 2) - polygon(i, 2))
If (node(k, 1) < (polygon(i, 1) + (cfx * (polygon(i + 1, 1) - polygon(i, 1))))) Then
result(k) = result(k) + 1 '上向きの辺と交差した場合は+1(ルール4)
End If
'下向きの辺の処理
'y軸方向について、節点が始点と終点の間にある。ただし、始点は含まない。(ルール2)
ElseIf ((polygon(i, 2) > node(k, 2)) And (node(k, 2) >= polygon(i + 1, 2))) Then
'節点と同じ高さになる辺の位置におけるxの値を求め、辺が節点の右か左か判定する。
'辺は節点よりも右側にある。(ルール3)
cfx = (node(k, 2) - polygon(i, 2)) / (polygon(i + 1, 2) - polygon(i, 2))
If (node(k, 1) < (polygon(i, 1) + (cfx * (polygon(i + 1, 1) - polygon(i, 1))))) Then
result(k) = result(k) - 1 '下向きの辺と交差した場合は-1(ルール5)
End If
End If
Next i
Selection.Cells(k, 1).Value = result(k)
Next k
End Sub
No.3
- 回答日時:
「座標を持った」というのが、座標成分の等式で表示されている
という意味であれば、平面の方程式へ直線のパラメータ表示を
代入して、恒等式になっているかチェックすればよいです。
No.2
- 回答日時:
「入るようにもできるし入らないようにもできる。
自分の好きなように決めればいいだけ」この質問文を読んだだけだとこう言う回答しかできないはずです。恐らく質問したい内容が伝わりません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 数学 球面と接する直線の軌跡が表す領域 4 2023/07/30 12:37
- 物理学 角運動量の式変形が分かりません。 4 2022/08/03 21:04
- docomo(ドコモ) ドコモのラクラクホン(アンドロイド)で、平面直角座表の位置に、たどり着く事が出来る、アプリは? 2 2023/06/23 21:12
- 数学 この問題が分かりません! 右図の直線①②の式は、y=-x+4①、 y=3/4x+1② である。2つの 3 2022/05/04 22:29
- 数学 Bの(5)は解説にはZ座標が一致しているのでz=x^2+y^2を π0の式に代入して計算してます。 4 2023/04/14 13:26
- 数学 数学の問題がわかりません。(球の中心の座標を求める問題) 2 2023/02/14 15:52
- 数学 2変数関数 難題 2 2023/02/14 15:01
- 数学 東大過去問 最大と最小 5 2023/02/18 13:08
- Java java 引数 戻り値のあるメソッド 3 2023/02/12 06:23
- 中学校 中1数学 比例のグラフの座標の読み取り 4 2023/03/28 12:26
このQ&Aを見た人はこんなQ&Aも見ています
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
グラフの交点の求め方(Excel)
-
C言語で制作するピラミッドアー...
-
ワード上Shapeの位置情報を統一...
-
ダイアログ内コントロールの位...
-
当たり判定後に面に沿って動か...
-
3次元空間上の2つの座標から...
-
マインクラフト(pc版)で座標...
-
多角形の内部かどうか判定する方法
-
直線上にある点の座標の求め方
-
選択範囲の座標値の抽出
-
C言語において、0の座標をキャ...
-
抽出した特徴点の座標を取得し...
-
エクセルで回転する座標の出し方
-
任意の軸による回転
-
シーケンサー(PLC?)で制...
-
C言語 配列で座標
-
バイキュービック補間のプログラム
-
最小二乗平面
-
任意点を中心とした回転
-
ピクチャボックスの座標取得
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
グラフの交点の求め方(Excel)
-
マインクラフト(pc版)で座標...
-
3次元空間上の2つの座標から...
-
エクセルで回転する座標の出し方
-
ダイアログ内コントロールの位...
-
多角形の内部かどうか判定する方法
-
交差する2線分の交点座標の求め方
-
ワード上Shapeの位置情報を統一...
-
C言語 配列で座標
-
閉図形の座標の配列が右回りか...
-
シーケンサー(PLC?)で制...
-
Excel VBA で自在に図形を変化...
-
直線上にある点の座標の求め方
-
エクセルである点からの距離で...
-
OpenCvSharp4による画像判定解...
-
始点、終点の二つの座標と半径...
-
GLで座標を変えて回転させたい
-
ピクチャボックスの座標取得
-
最小二乗平面
-
c言語でキーボードから2点の座...
おすすめ情報