web-dev-qa-db-ja.com

不規則な形状のポリゴンの「視覚」中心を見つける最も速い方法は何ですか?

不規則な形状のポリゴンの視覚的中心であるポイントを見つける必要があります。視覚的中心とは、視覚的に多角形の広い領域の中心にあるように見える点を意味します。アプリケーションは、ポリゴン内にラベルを配置することです。

内部バッファリングを使用するソリューションは次のとおりです。

https://web.archive.org/web/20150708063910/http://proceedings.esri.com/library/userconf/proc01/professional/papers/pap388/p388.htm

これを使用する場合、バッファを見つけるための効果的で高速な方法は何ですか?他の方法を使用する場合、その方法はどれですか?

非常に厳しいポリゴンの良い例は、巨大な太いU(Arial BlackまたはImpactまたはそのようなフォントで記述された)です。

48
Mikhil

ポリゴンをバイナリイメージに変換できる場合は、画像処理の分野に存在する基盤を使用できます。例: ブロック表現バイナリイメージの高速スケルトンアルゴリズム

しかし、これは、離散化エラーと余分な作業のために、一般的なケースでは本当に合理的ではありません。

ただし、これらは便利かもしれません:

編集:たぶん、多角形に含まれる最大の円の中心である点を探したいかもしれません。必ずしも観察された中心にあるとは限りませんが、ほとんどの場合、おそらく期待される結果が得られ、わずかに病理学的な場合にのみ完全にオフになっています。

10
Reunanen

Polylabel と呼ばれるMapBoxから、これに対する非常に良い解決策を見つけました。完全なソースは Github でも入手可能です。

T Austinが言ったように、本質的にポリゴンの視覚的中心を見つけようとします。

enter image description here

特定の詳細は、これが実用的な解決策であることを示唆しています。

残念ながら、[理想的なソリューション]の計算は複雑で時間がかかります。この問題に対する公開されたソリューションでは、制約付きドローネ三角形分割または前処理手順として直線スケルトンを計算する必要があります—どちらも時間がかかり、エラーが発生しやすいです。

ユースケースでは、正確な解決策は必要ありません— speed速度を上げるためにある程度の精度を犠牲にしたいと思います。地図にラベルを配置する場合、数学的に完璧であるよりもミリ秒で計算することが重要です。

ただし、使用方法に関する簡単なメモ。ソースコードは、そのままJavascriptで機能しますが、これを「通常の」ポリゴンで使用する場合は、ここの関数が通常のポリゴンではなく GeoJSONPolygons を使用するため、空の配列にラップする必要があります。すなわち.

var myPolygon = [[x1, y1], [x2, y2], [x3, y3]];
var center = polylabel([myPolygon]);
12
Chris

どうですか:

多角形の重心が多角形の内側にある場合は、それを使用します。それ以外の場合:

1)重心から多角形を通る線を延長し、多角形を等しい面積の2つの半分に分割します

2)「視覚的中心」は、線が周囲に接する最も近い点と、重心から離れる方向に周囲を切断する次の点との中間点です。

以下に、それを説明する写真をいくつか示します。

enter image description here

enter image description here

7
T.Austin
7
Arron S

多角形の各エッジの中心位置(x、y)を計算します。これを行うには、各エッジの端の位置の差を見つけます。各次元の各中心の平均を取ります。これがポリゴンの中心になります。

2
ire_and_curses

これが最速だと言っているわけではありませんが、多角形の内側にポイントを提供します。 ストレートスケルトン を計算します。探しているポイントはこのスケルトンです。たとえば、バウンディングボックスの中心までの法線距離が最も短いものを選択できます。

1

多角形の「内接円」(内部に収まる最大の円)を見つけて、その中心にラベルを中央揃えしてみてはどうでしょうか。開始するためのリンクがいくつかあります。

http://www.mathopenref.com/polygonincircle.html
https://nrich.maths.org/discus/messages/145082/144373.html?121943947

これはすべてのポリゴンで完全に機能するわけではありません。 Cのように見えたポリゴンは、予測できない場所にラベルを付けます。しかし、利点は、ラベルが常にポリゴンのソリッド部分に重なることです。

0
Ryan Lundy