外接円の方程式とその応用を通してドローネ条件をチェックするためのアルゴリズムの最適化

2つの三角形についてドローネ条件が満たされていることをすばやく確認する方法についての秘密を教えます。

実際の最適化自体については以下で説明します(「外接円の方程式によるドローネ条件のチェックのアルゴリズムの最適化」を参照)が、すべてについて順番に説明します。



私の場合、イメージトレーシングでは、平面をプリミティブセクター(三角形)に分割するために三角形分割が使用されます。 ご存知のように、調整、境界の識別、境界のバイパス、輪郭のスイープなど、いくつかの段階に分けられます。 これは最も一般的な形式です。 私は、最も困難な段階、つまり飛行機を掃除する段階で停止したいと思います。



入り口で


出力で境界線を検出してトラバースした後、多くの外部輪郭が得られました。 各輪郭の輪郭には異なる色が付いています。 既知の各回路には、既知の数の内部回路も含まれています。

したがって、「平面を掃除する」という観点から、外部の輪郭を個別に考慮すると、多くのポイントがあり、各ポイントには左右に1つの隣接点があります。 つまり すべてのポイントはチェーンで閉じられ、単一の「ぶら下がり」ポイントはなく、各チェーンには少なくとも3つのポイントが含まれます(図1)。





図1



どうする


図を三角形でスイープする必要があります。



検索


本[1]を読んだ後、少なくとも何らかの形で私のケースに適したDelaunay三角形分割を構築する単一の(少なくとも1つの)方法が見つかりませんでした。 他の本を検索しませんでした。 はい、これで十分でした。彼女は私の頭の考えを整理してくれました。 その結果、彼は「自転車」を発明しました。



アルゴリズム


1)まず最初に、検討中の図にはシーケンスが1つしかないと仮定します。 それからすべては、三角形の連続的な撤回に帰着します。 任意の点を取り、隣接する点で三角形を構築しようとします。 三角形を構築できなかった場合(これら2つの点を結ぶ線が既に構築されたものと交差するか、線が除外ゾーンを通過する場合(図2))、次の点に移動します。作成元のポイントを削除します(図4)。





図2



図3



図4



もう1つ:次の三角形を保存するときは、頂点を時計回りに(正しい座標系で)記録する必要があります。 これは将来、コンピューティングリソースを削減するのに役立ちます。



2)平面全体をスイープするまで手順1を繰り返します。



3)複数のシーケンスがある場合、つまり 1つ、およびその内部に1つ以上の内部輪郭(図1)。 ここでは、各シーケンスを個別に考慮する必要があります。 次の内側の輪郭を取ります。 1つの外部と1つの内部から、2つの単一回路を作成します。 これを行うには、1つの回路から別の回路への2つの「ポート」を見つけます。 「ポート」の条件:それらは互いに交差してはならず(端に触れないこと)、等高線と交差してはなりません(図5)。





図5



図6

4)次に、すべての内部シーケンスを、互いに分離された、すでに形成された(パラグラフ3)シーケンスに順番に導入する必要があります。 新しいものを含むものとマージする必要があります。 定義上、内部シーケンスは他のものと接触したり交差したりすることはなく(1つの外部とすべての可能な内部の両方)、すべてがスムーズに進みます。

ポートを見つけたら(図6)、新しいシーケンスを構築し、現在のアルゴリズムのポイント1と2でそれらをバイパスするのは簡単です(図7)。



図7



5)第4段階の後、三角形のリストが表示されます(図8)。 彼らはすでにタスクを完了したかのように見えますが、写真を美しくするために残っています。ドローネ条件が満たされていることを確認してください(図9)。



図8



図9



6)6つ目のポイントについてお話しします。 これは、アイテム番号5で受け取った三角形のリストを順番に実行します。 まず、すべての三角形に「ダーティ」というラベルを付けます。 各サイクルで、各三角形のドロネー条件をチェックします。 条件が満たされない場合は、再構築を行い、隣人と現在の三角形を「ダーティ」としてマークします。 条件が満たされている場合は、クリーンとしてマークします。 アルゴリズムの私の実装では、各三角形はその隣接への参照を持っています。 この場合、6番目のアイテムが最速です。



5番目のステージの詳細をご覧ください。


さて、私の知る限り、三角形がドロネー条件を満たしているかどうかを判断する方法は2つあります。1)反対の角度の合計を確認します。 180未満でなければなりません。2)外接円の中心を計算し、4番目の点までの距離を計算します。 ポイントが外接円の外側にある場合、ドロネー条件が満たされていることを誰もが知っています。



計算の力No. 1:乗算/除算の10の演算と加算/減算の13の演算。

計算の力No. 2:乗算/除算の29演算と加算/減算の24演算。



例えば本[1]で計算されている計算能力の観点から、オプションNo. 1はより収益性が高い。 そうでない場合は、彼はそれを実現しました(図10)。 この方法を「コンベヤ」に設定した後に判明したように、結果として生じる不確実性。 これは、角度A自体が180度を超える場合のオプションです。 本[1]では、個別のプライベートメソッドの1つとして考えられています。 そして、そのすべての優雅さ、透明性、パフォーマンスは消えます。 また、後に、方法2を非常に大幅に最適化できることが判明しました。





図10



外接円の方程式を通してドローネ条件をチェックするためのアルゴリズムの最適化



次は純粋な数学です。



だから私たちは持っています:

点M(X、Y)の条件を、点A(x1、y1)、B(x2、y2)、C(x3、y3)を通る円の方程式で確認するには、次の形式で記述できます。



(a⋅(X ^ 2 + Y ^ 2)-b⋅X + c⋅Y-d)⋅sign a≥0



詳細は壮大な本[1]に記載されています。 (いいえ、私は彼女の著者ではありません)

したがって、符号aはバイパス方向の符号であり、最初から時計回りに三角形を作成したため、省略できます(1に等しい)。



次に、座標の中心をポイントMに移動すると、次の結果が得られます(図11)。



A(x1-X、y1-Y)、B(x2-X、y2-Y)、B(x3-X、y3-Y);



-d> = 0



図11



それだけじゃない?



d <= 0



本によると、再び、[1]



(x1^2 + y1^2)*(y2*x3 - x2*y3) + (x2^2 + y2^2)*(x1*y3 - y1*x3) + (x3^2 + y3^2)*(y1*x2 - x1*y2) <= 0
      
      







乗算/除算の15演算と加算/減算の14演算があります。



ご清聴ありがとうございました。 批判を待っています。



使用された文献のリスト


1. Skvortsov A.V. ドローネの三角形分割とその応用。 -トムスク:出版社トム。 大学、2002年-128秒 ISBN 5-7511-1501-5



All Articles