2

長方形のコレクションを管理するクラスを設計しています。各四角形はボタンを表すため、次のプロパティが含まれています。

  • ×位置
  • y 位置
  • 身長
  • 押されたときに何が起こるかのコールバック関数。

概念自体は非常に単純で、コマンド ライン インターフェイスを介して管理されます。特に。

「100, 125」と入力すると、このポイント (または複数) を含む長方形が存在するかどうかが調べられ、それらのコールバック関数が実行されます。

私の提案は、このコレクション内のすべての四角形を反復処理し、この点を含む個々の四角形のコールバックを実行するか、一致する最初の四角形で停止することです (z オーダーをシミュレートします)。

ただし、この反復は、私が持っている長方形が増えるほど長くなるため、このソリューションはずさんではないかと心配しています。これはコンソール アプリケーションでは問題ありません。10,000 を超える四角形を簡単に調べてどれが一致するかを見つけることができるため、計算に時間がかかりますが、時間的には特に問題にはなりません。

問題は、マウスが移動するたびにこのチェックを実行する必要がある GUI アプリケーションにこのアルゴリズムを実装する場合 (マウス オーバー効果をシミュレートするため)、10,000 オブジェクトのパネル上でマウスを 10 ピクセル移動するには、次のチェックが必要になることです。 100,000 個のオブジェクト、それは 1000 ピクセルにも満たないか、それ以上の人がマウスオーバーする傾向があります。

この問題に対するより洗練された解決策はありますか? それとも、そのようなプログラムは常に非常に高価になる必要がありますか?

注: ほとんどの GUI が一度に 10,000 個のアクティブなオブジェクトを処理する必要がないことは理解していますが、それは私の目的ではありません。この問題をボタンの観点から説明することにした理由は、ボタンの方が単純だからです。理想的には、GUI や、マウスと相互作用するパーティクル システム、およびその他の要求の厳しいシステムで機能するソリューションが必要です。

GUI では、間接参照を簡単に使用してチェックの量を大幅に減らすことができますが、マウスを動かすたびにチェックを実行する必要があるという問題は軽減されません。 25 個のオブジェクトで 400 ピクセルを超える (理想的な条件で) ことは、10,000 個のオブジェクトで 1 ピクセルを移動するのと同じくらい悪いことです。

一言で言えば、この問題には 2 つの要素があります。

  1. チェックの量を 10,000 から減らすにはどうすればよいでしょうか (オブジェクトが 10,000 あるとします)。
  2. このような GUI アプリケーションで必要なチェックの量を、マウスを動かすたびに減らすことは可能ですか?

どんな助けでも大歓迎です!

4

2 に答える 2

2

この問題に対するより洗練された解決策はありますか? それとも、そのようなプログラムは常に非常に高価になる必要がありますか?

すべてのオブジェクトを線形検索する代わりに、四分木などのデータ構造を使用して、最も近いオブジェクトを効率的に見つけることができます。

または、アルゴリズムの使用目的に基づいて、より現実的な一連の要件を考え出すこともできます。一度に 10,000 個のボタンが表示される GUI は、多くの理由でデザインが良くありません。主な理由は、下手なユーザーが適切なボタンを見つけるのに非常に苦労することです。パフォーマンスの観点からは、UI のより典型的な多数の長方形 (たとえば 2 から 100 の間のどこか) を介した線形検索は問題になりません。

于 2013-07-13T16:25:40.727 に答える