1

ユーザーがスクロールしてズームして表示できるように、何千ものノードを含むグラフを表示する必要があります。ノードは無次元の点のように動作し、エッジは 1 次元の線のように動作する必要があります。つまり、ズームインすると、ノードを表す円がさらに離れますが、それぞれのサイズは同じままで、それらを結ぶ線は長くなりますが、太くなりません。可能であれば、ズームは「連続的」かつ「無限」であるべきです。

この問題を解決するために使用される API とアルゴリズムは何ですか? (たとえば、CAD や GIS アプリケーションなど)

GDI+ を使用しても、許容できるパフォーマンスに近づくことはできませんでした。私の実装はおそらく素朴でしたが、それでも、OpenGL または DirectX が必要だと思います。

4

4 に答える 4

2

線と可視点の描画を、点を表す位置のスケーリングから分離する必要があります。そうすれば、シーンがズームされているときに、実際には位置をスケーリングしてレンダリングし、ズーム レベルに関係なく同じ線と可視点の方法を使用します。

前回私が見たとき、Direct3D はこれを行うためのすぐに使えるものを提供するつもりはありませんでした。線と点のプリミティブを自分で実装する必要があります。さらに重要なことは、Direct3D で必要な変換を実行するには、ベクトルと行列について十分に理解している必要があることです。OpenGL はあまり使用していません。

GDI+ は遅くなる可能性がありますが、現在表示されているポイントのみを表示することに細心の注意を払うことで、実際にはまともなパフォーマンスを得ることができます。もし私があなたの立場だったら、あなたのレンダリング アルゴリズムのパフォーマンスを改善し、GDI+ をもう少し使い続けることに間違いなくもっと時間を費やすでしょう。

また、シーンをメモリ内ビットマップ (表示ウィンドウと同じサイズ) に完全にレンダリングしてから、このビットマップを一度に単純にレンダリングすると、すべてのポイントとラインを個別に表示ウィンドウにレンダリングするよりもパフォーマンスが向上します。

于 2009-12-29T02:35:54.260 に答える
1

ZedGraphは、説明したことのほとんどを実行します (固定サイズでの線と点の表示、ズームなど)。コードプロジェクトのチュートリアルをチェックして、その機能がニーズに合っているかどうかを確認することをお勧めします。実装が簡単で、柔軟性が高く、.dll は約 300k であることがわかりました。

これが役に立てば幸いです、アンドリュー

于 2009-12-29T17:56:48.050 に答える
1

ROOTは要求されたすべての機能を提供すると思いますが、大きなパッケージであり、学ぶべきことがたくさんあります...

于 2009-12-29T17:46:56.307 に答える
0

私は最近、3D でのプロットを高速化するための Java ライブラリをリリースしました ( http://code.google.com/p/jzy3d/ )。

3D点が無次元である3D散布図の例があります。ネットワーク ノードをリンクするすべての行を追加するのは簡単なことです。

マウスで 3D シーンを拡大/縮小するためのツールが用意されているので、ほとんど何もする必要はありません。

よろしく、マーティン

于 2009-12-29T14:22:09.010 に答える