CGPath
下の図の赤と青の形状のように、すべてが単一の凹面ベジエ曲線を含む、さまざまな形状とサイズの不確定な数の閉じた要素があります。
n
これらの形状を(ほぼ) 等しいサイズの領域に分割する最も簡単で効率的な方法は何ですか?
CGPath
下の図の赤と青の形状のように、すべてが単一の凹面ベジエ曲線を含む、さまざまな形状とサイズの不確定な数の閉じた要素があります。
n
これらの形状を(ほぼ) 等しいサイズの領域に分割する最も簡単で効率的な方法は何ですか?
あなたが達成したいことの文脈と制約が何であるか、私は本当に理解していません。たとえば、細分化された領域が同じサイズであるという厳しい要件はありますか?
多くの場合、パフォーマンスの問題に対する解決策は、より高速なアルゴリズムではなく、通常は次の 1 つ以上の別のアプローチです。
値を事前に計算するか、可能な限りオフラインで計算します。別のサーバー API を使用して、オフラインで細分割を実行し、複数のクライアントの結果をキャッシュするとします。計算後の結果をビットマップとして提供し、各色が表示する値のテーブルにインデックスを付けることができます。値を調べることは、タッチ位置のピクセルにインデックスを付けるという単純な問題です。
解を単純化または近似します。グリッドの細分化は十分に正確でしょうか? 500 x 6 = 3000 のサブディビジョンでは、各領域に約 51 平方ポイントしかありません。これは約 7x7 ポイントの領域です。そのサイズでは、領域が完全に正確であるかどうかにユーザーは気付かないでしょう。とにかく、タッチ解像度のために、隣接する領域を集約する必要がある場合があります。
プログレッシブリファインメント。多くの場合、前もってアルゴリズム全体を計算する必要はありません。多くの場合、アルゴリズムは個別の (多くの場合対称的な) ユニットで実行されます。つまり、前のステップからの情報を再利用することがよくあります。前もって最初のステップだけを計算してから、バックグラウンド スレッドを使用して残りの詳細を段階的に埋めることができます。タッチが発生するまで最終計算を延期することもできます。その時点で最大 1 秒の遅延は許容できますが、最悪の場合、計算中にアニメーションを表示することもできます。
いくつかのハイブリッド アプローチを使用して、ドロネー三角形分割を使用して 1 つまたは 2 つのレベルを計算し、さらに 2 つのレベルに対して単純で高速な三角分割を使用することができます。
必要な精度に応じて、個別のサンプルが必要ない場合は、三角形のポイント間の加重平均を使用して最終レベルを概算できます。つまり、タッチが 2 つのポイントの中間にある場合は、それらの間の平均値を選択します。