[解決済み] ある点が矩形の内側にあるかどうかを調べる
質問
ある点が矩形の内側にあるかどうかを調べたい。矩形はどのような向きでもよく、軸合わせされている必要はない。
私が思いついた1つの方法は、矩形と点の座標を回転させて矩形の軸を揃え、点の座標が矩形の座標の中にあるかどうかを単純にテストすることでした。
上記の方法は回転を必要とし、そのため浮動小数点演算が必要です。他に効率的な方法はないでしょうか?
どのように解決するのですか?
長方形はどのように表現されるのでしょうか?3点?4点?点、辺、角度?点2つと辺1つ?他の何か?それがわからなければ、あなたの質問に答えようとする試みは、純粋に学問的な価値しかないでしょう。
いずれにせよ、どんな 凸の 多角形 (矩形を含む) の場合、テストは非常に簡単です。多角形の各辺をチェックし、各辺が反時計回り方向に向いていると仮定し、点が が左 にあるかどうかを調べる。すべての辺がテストに合格したら、その点は内側にある。少なくとも1つが不合格の場合、その点は外側となります。
が内側にあるかどうかをテストするために、点
(xp, yp)
がエッジの左側にあるかどうかを調べるために
(x1, y1) - (x2, y2)
を計算すればよい。
D = (x2 - x1) * (yp - y1) - (xp - x1) * (y2 - y1)
もし
D > 0
の場合、ポイントは左辺にある。もし
D < 0
の場合、ポイントは右側にある。もし
D = 0
の場合、点は直線上にある。
この解答の前のバージョンでは、一見異なるバージョンの左辺のテスト(下記参照)を説明しました。しかし、それが同じ値を計算することは簡単に示すことができます。
... が点であるかどうかをテストするために
(xp, yp)
が辺の左側にあるかどうかを調べるために
(x1, y1) - (x2, y2)
にあるとき、その辺を含む直線の線型方程式を作る必要がある。その方程式は次のようになる。
A * x + B * y + C = 0
ここで
A = -(y2 - y1)
B = x2 - x1
C = -(A * x1 + B * y1)
あとは計算するだけです。
D = A * xp + B * yp + C
もし
D > 0
の場合、ポイントは左辺にある。もし
D < 0
の場合、ポイントは右側にある。もし
D = 0
の場合、点は直線上にある。
しかし、このテストはまた、任意の凸多角形に対して動作します。つまり、矩形には一般的すぎるかもしれません。矩形では、より単純なテストが可能かもしれません...。たとえば、長方形 (または他の任意の平行四辺形) で
A
と
B
は同じ大きさですが、対向する(つまり平行な)辺の符号が異なるので、これを利用してテストを簡略化することができます。
関連
-
[解決済み] NPとco-NPの違いは何ですか?
-
[解決済み] 素朴な」アルゴリズムとは何か、「閉じた」解とは何か?
-
[解決済み] Octave : ロジスティック回帰 : fmincg と fminunc の違い
-
[解決済み] 2つのNFAの交点の求め方
-
[解決済み] CLRSの相対的漸近成長に関する問題(表)の解き方について教えてください。
-
[解決済み】画像処理。コカ・コーラ缶」認識のためのアルゴリズム改良
-
[解決済み] Dijkstraのアルゴリズムによる負の重み付け
-
[解決済み] クイックソート ピボットの選択
-
[解決済み] あるアルゴリズムの計算量がO(log n)になる原因は何でしょうか?
-
[解決済み] 20問のAIアルゴリズムはどのように機能するのか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】3値の中央値戦略
-
[解決済み] グラフにおいて最小容量が最大となる経路の探索
-
[解決済み] CLRSの相対的漸近成長に関する問題(表)の解き方について教えてください。
-
[解決済み] は、「減少しない」列が「増加する」のか?
-
[解決済み] グラフが半連結であるか否かを判定する
-
[解決済み] 隣接リスト表現の時間複雑性?
-
[解決済み] あるアルゴリズムの計算量がO(log log n)になる原因は何でしょうか?
-
[解決済み] リストの並べ換えをすべて生成するアルゴリズム?
-
[解決済み] 並べ換え→数→並べ換えの高速マッピングアルゴリズム
-
[解決済み] 旧経度+nmから新経度、新緯度を算出する。