フロントエンド開発では、点がポリゴン内にあるかどうかを判断する必要がある状況によく遭遇します。たとえば、マップにクリック イベントを追加する場合、対応する操作を決定するには、ユーザーがクリックした点が特定の領域内にあるかどうかを判断する必要があります。この記事では、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 が多角形内にあるかどうかを内積法を使用して判断する方法を紹介します。
- ベクトルの構築
多角形の各頂点の点 P をベクトルとして考え、そのベクトルの座標差を計算することでベクトルを構築できます。具体的には、点 P の座標が (xp, yp) で、多角形の i 番目の頂点の座標が (xi, yi) である場合、ベクトル P->i の座標は (vx, vy) となります。その計算式は次のとおりです:
vx = xi - xp;
vy = yi - yp;
この計算を通じて、多角形の各辺のベクトルを取得できます。また、多角形の頂点への点 P ベクトルを取得することもできます。
- 内積の計算
次に、点 P と多角形の各辺のベクトルの内積の合計を計算する必要があります。内積の合計が正の場合、点 P は多角形の外側にあり、内積の合計が負の場合、点 P は多角形の内側にあります。
内積式のベクトルを最初に正規化する必要があること、つまりベクトルの長さを 1 にスケールする必要があることに注意してください。これにより、内積の結果が角度のみに関連することが保証されます。ベクトル間の長さはベクトルの長さの影響を受けません。
内積を計算するコードは次のとおりです。
function isPointInsidePolygon(point, Polygon) {
var angle = 0,
i, vertex1, vertex2;
var n = ポリゴン。 length;
for (i = 0; i } return Math.abs(angle) >= Math.PI; 関数 PolarAngle(x, y, x1, y1, x2, y2) { var diff = angle2 - angle1; } } return diff; このうち、isPointInsidePolygon 関数は、点が多角形の内側にある場合、polarAngle 関数を使用して内積を計算します。 4. 概要 この記事では、JavaScript を使用して点が多角形の内側にあるかどうかを判断する方法を紹介します。なお、内積法は凸多角形のみに適用され、凹多角形の場合は他のアルゴリズムで判定する必要があります。実際のアプリケーションでは、重なり合うエッジまたは頂点を持つポリゴン、ポリゴン エッジ上の頂点など、追加の判断と処理が必要ないくつかの特殊な状況を考慮する必要があります。 vertex1 = polygon[i];
vertex2 = polygon[(i + 1) % n];
angle += polarAngle(
point[0],
point[1],
vertex1[0],
vertex1[1],
vertex2[0],
vertex2[1]
);
}
var angle1 = Math.atan2(y - y1, x - x1);
var angle2 = Math.atan2(y - y2, x - x2);
while (diff > Math.PI) {diff -= 2 * Math.PI;
while ( diff diff += 2 * Math.PI;
}
以上がJavaScript を使用して点がポリゴン内にあるかどうかを確認する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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

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

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

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

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

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

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

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


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

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

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

SublimeText3 Linux 新バージョン
SublimeText3 Linux 最新バージョン

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ホットトピック









