検索
ホームページウェブフロントエンドフロントエンドQ&AJavaScript を使用して点がポリゴン内にあるかどうかを確認する方法

フロントエンド開発では、点がポリゴン内にあるかどうかを判断する必要がある状況によく遭遇します。たとえば、マップにクリック イベントを追加する場合、対応する操作を決定するには、ユーザーがクリックした点が特定の領域内にあるかどうかを判断する必要があります。この記事では、JavaScript を使用して点がポリゴン内にあるかどうかを判断する方法を紹介します。

1. 多角形アルゴリズム

点が多角形内にあるかどうかを判断するアルゴリズムは数多くありますが、中でも光線法と内積法がより一般的に使用されます。この記事では例としてドット積法を紹介します。

内積法の中心的な考え方は、ベクトルのプロパティを使用して、多角形の各頂点の点 P をベクトルとみなして、点 P が点を介して多角形の内側にあるかどうかを計算することです。ベクトル間の積。具体的には、点 P が多角形の内側にあるかどうかは、P の内積と多角形の辺ベクトルの和の符号に依存します。

2. 内積の計算式

内積の計算式は次のとおりです:

a · b = ax bx ay by

ここで、a(x, y) と b(x, y) は 2 つのベクトルであり、a・b はそれらの内積を表します。ドット積の結果は、2 つのベクトル間の角度の余弦を表すスカラーです。

ドット積の結果が 0 より大きい場合は、ベクトルの角度が 90 度未満であることを意味し、ドット積の結果が 0 より小さい場合は、ベクトルの角度が 90 度未満であることを意味することに注意してください。 90 度より大きい; 内積の結果が 0 に等しい場合、ベクトルが垂直、つまり 90 度であることを意味します。

3. 点が多角形内にあるかどうかを判断する

次に、点 P が多角形内にあるかどうかを内積法を使用して判断する方法を紹介します。

  1. ベクトルの構築

多角形の各頂点の点 P をベクトルとして考え、そのベクトルの座標差を計算することでベクトルを構築できます。具体的には、点 P の座標が (xp, yp) で、多角形の i 番目の頂点の座標が (xi, yi) である場合、ベクトル P->i の座標は (vx, vy) となります。その計算式は次のとおりです:

vx = xi - xp;
vy = yi - yp;

この計算を通じて、多角形の各辺のベクトルを取得できます。また、多角形の頂点への点 P ベクトルを取得することもできます。

  1. 内積の計算

次に、点 P と多角形の各辺のベクトルの内積の合計を計算する必要があります。内積の合計が正の場合、点 P は多角形の外側にあり、内積の合計が負の場合、点 P は多角形の内側にあります。

内積式のベクトルを最初に正規化する必要があること、つまりベクトルの長さを 1 にスケールする必要があることに注意してください。これにより、内積の結果が角度のみに関連することが保証されます。ベクトル間の長さはベクトルの長さの影響を受けません。

内積を計算するコードは次のとおりです。

function isPointInsidePolygon(point, Polygon) {
var angle = 0,

i,
vertex1,
vertex2;

var n = ポリゴン。 length;

for (i = 0; i

vertex1 = polygon[i];
vertex2 = polygon[(i + 1) % n];

angle += polarAngle(
  point[0],
  point[1],
  vertex1[0],
  vertex1[1],
  vertex2[0],
  vertex2[1]
);

}

return Math.abs(angle) >= Math.PI;
}

関数 PolarAngle(x, y, x1, y1, x2, y2) {
var angle1 = Math.atan2(y - y1, x - x1);
var angle2 = Math.atan2(y - y2, x - x2);

var diff = angle2 - angle1;
while (diff > Math.PI) {

diff -= 2 * Math.PI;

}
while ( diff

diff += 2 * Math.PI;

}

return diff;
}

このうち、isPointInsidePolygon 関数は、点が多角形の内側にある場合、polarAngle 関数を使用して内積を計算します。

4. 概要

この記事では、JavaScript を使用して点が多角形の内側にあるかどうかを判断する方法を紹介します。なお、内積法は凸多角形のみに適用され、凹多角形の場合は他のアルゴリズムで判定する必要があります。実際のアプリケーションでは、重なり合うエッジまたは頂点を持つポリゴン、ポリゴン エッジ上の頂点など、追加の判断と処理が必要ないくつかの特殊な状況を考慮する必要があります。

以上がJavaScript を使用して点がポリゴン内にあるかどうかを確認する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
USESTATEの理解():React React Neact State Managementの包括的なガイドUSESTATEの理解():React React Neact State Managementの包括的なガイドApr 25, 2025 am 12:21 AM

usestate()isareacthookusedtomeStateinfunctionalComponents.1)itInitializeSandUpDatestate、2)colledatttheToplevelofComponents、3)canleadto'stalestate'ifnotusedly、and4)cancancancancancanbeoptimizeduptimizeduptimizedususecall -calleSuperesteSteSteSteSteSteSteSteSteStateSupteStateSuptateSuptatedates

Reactを使用することの利点は何ですか?Reactを使用することの利点は何ですか?Apr 25, 2025 am 12:16 AM

ReactisPopularduetoitsComponent Architecture、Virtualdom、Richecosystem、およびdeclarativenature.1)コンポーネントベースのarchitectureallowsforReusable anduipieces、改善様式および測定可能性。

Reactでのデバッグ:一般的な問題の特定と解決Reactでのデバッグ:一般的な問題の特定と解決Apr 25, 2025 am 12:09 AM

debugReactapplicationivivivity、EtheseStrategies:1)AddressPropdrillingWithContextapiorredux.2)HandLeasynchronousoperations withuthutateanduseeffect、Abortcontrollertopreventraceconditions.3)最適化合物を使用して、最適化合物を使用してください

ReactのUseState()とは何ですか?ReactのUseState()とは何ですか?Apr 25, 2025 am 12:08 AM

UseState()inReactallowsstateManagementInFunctionalComponents.1)itsimplifiesstateManagement、makeCodemoreconcise.2)usetheprevcountFunctionToupDateStateBasedTateBasedTateBadeStateValue、AvolidingStalestateSues.3)

useState()vs。usereducer():州のニーズに合った適切なフックを選択するuseState()vs。usereducer():州のニーズに合った適切なフックを選択するApr 24, 2025 pm 05:13 PM

ChooseuseState()forsimple,independentstatevariables;useuseReducer()forcomplexstatelogicorwhenstatedependsonpreviousstate.1)useState()isidealforsimpleupdatesliketogglingabooleanorupdatingacounter.2)useReducer()isbetterformanagingmultiplesub-valuesorac

UseState()を使用して状態を管理する:実用的なチュートリアルUseState()を使用して状態を管理する:実用的なチュートリアルApr 24, 2025 pm 05:05 PM

UseStateは、州の管理を簡素化し、コードをより明確にし、読みやすくし、Reactの宣言的な性質と一致するため、クラスコンポーネントやその他の州管理ソリューションよりも優れています。 1)UseStateを使用すると、状態変数を関数コンポーネントに直接宣言することができます。2)フックメカニズムの再レンダリング中に状態を覚えています。

UseState()を使用する時期と、代替の州管理ソリューションを検討するタイミングUseState()を使用する時期と、代替の州管理ソリューションを検討するタイミングApr 24, 2025 pm 04:49 PM

useUsestate()forlocalcomponentStatemanagement; compleartinative forglogic、orperformanceissues.1)useidealforsimple、localstate.2)useglobalStateSolutionSolutionSuxorContextForSharedState.3)OptForreDuxtormobxobxobxobforexSt

Reactの再利用可能なコンポーネント:コードの維持可能性と効率の向上Reactの再利用可能なコンポーネント:コードの維持可能性と効率の向上Apr 24, 2025 pm 04:45 PM

再利用することは、codecodemaintainabilityを抑制することを再生します

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

SecLists

SecLists

SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

mPDF

mPDF

mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

SublimeText3 Linux 新バージョン

SublimeText3 Linux 新バージョン

SublimeText3 Linux 最新バージョン

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

DVWA

DVWA

Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、