問題タブ [cgal]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
376 参照

c++ - オブジェクトが XYZ 座標にある場合、Z を X に変更してビジュアル ジオメトリをそのまま維持するにはどうすればよいですか?

これで、Maya からエクスポートされたオブジェクトができました。XYZ 軸で表示されていると想像してください。私たちはそれを見て、必要に応じて見えます。それでも、ZYX で同じ画像を見たいと思っています。オブジェクトにそのような変更を加える方法は?

(2d の例) 次のようになります。

ここに画像の説明を入力

私たちは見る必要があります:

ここに画像の説明を入力

一方、Y はそのまま維持されます。CGALでそのようなことを行う方法は?

0 投票する
1 に答える
101 参照

c++ - CGAL::assign と互換性のある CGAL クラスからの派生

CGAL::Parabola_segment_2 クラスから派生したいと考えています。public メンバー関数を介してアクセスできない 2 つの保護されたデータ メンバーにアクセスしたいためです。

私のコードはコンパイルおよび実行されますが、以下のコードの if ステートメントは決して true を返しません。しかし、いくつかの値に対しては true を返さなければならないと確信しています。

私が変われば

その後、プログラムは希望どおりに実行されますが、必要な変数にアクセスできませんでした。私の質問は、CGAL::assign() 関数と互換性があるように CGAL クラスをどのように派生させるべきですか?

0 投票する
1 に答える
293 参照

cgal - Delaunay 三角形分割: Point の代わりに Point_handle を格納する頂点

ポイントをカスタム コンテナーに保存しています。これらのポイントのサブセットで Delaunay 三角形分割を作成したいと考えています。

ポイントはコンテナーに既に存在するため、ドロネー三角形分割でこれらのポイントのコピーを保存したくありません。

私のポイント クラスは Point_3 から派生し、いくつかの情報 (ブール値と整数) が含まれています。

そのために、カスタム triangulation_vertex クラスを作成しました。

Delaunay 三角形分割にポイントを挿入するには、次のようにします。

p は point_handle (つまり、My_point*) です。

Delaunay 三角形分割の点を削除するには、次のようにします。

ここで、dvh は vertex_handle です。

三角測量へのポイントの挿入は正常に機能していますが、ポイントの削除に問題があります。カスタム頂点クラスが正しくありませんか?

それを行うより良い方法はありますか?

- 編集 - - -

dt は Delaunay 三角形分割です。

--

@sloriot: これは良いスタートですか?

0 投票する
1 に答える
125 参照

c++ - btIDebugDraw (QT なし) に基づく CGAL レンダラー?

複雑な構造/レンダラー (Nef Polyhedra や Polyhedron など - 私にとってはすべてです) のコレクションと、箇条書きbtIDebugDraw1 - 仮想クラスと同様に機能する単純なレンダラー (エンジン) はありますか? レンダリング関数を実装し、そのレンダリングのインスタンスを提供します。 engine オブジェクトからレンダラーを構造化します (箇条書きの場合はWorld likebtDiscreteDynamicsWorld )。ここでは、Nef Polyhedra または Polyhedron レンダラーになります。CGAL にそのようなクラスはありますか? btIDebugDrawまたは、 render Polyhedron ( CGAL::Polyhedron_3<Kernel>) と Nef Polyhedra ( )の準備が整った実装をどのように使用しますCGAL::Nef_polyhedron_3<Kernel>か?

0 投票する
0 に答える
273 参照

c++ - 三角形の複雑な配列をCGALのNef多面体にロードして、3Dブール演算を行う方法は?

したがって、頂点と三角形の配列があります(1つのソリッドで囲まれたボディではありません。複数の三角形がいくつか統合されており、N個の島/平面とは異なります)。これらすべての頂点 + 三角形を 1 つの Nef 多面体として扱い、それらに対してブール演算を実行したいと考えています。接続されていないすべての三角形を Nef Polyhedra にロードする方法は? (私のカーネルはExact_predicates_exact_constructions_kernel)

0 投票する
1 に答える
241 参照

cgal - cgal からコードを抽出する

プロジェクトで CGAL のハーフエッジ データ構造を使用したいと考えています。

これは LGPL によってライセンスされているため、ユーザーのシステムにこの大きなライブラリをインストールする必要はなく、この小さな部分を自分のソフトウェアと一緒に配布したいと考えています。

私の質問は、Cgal のブーストの bcp のようなものはありますか? ハーフエッジのソース ファイルを手動でコピーし始めましたが、かなり複雑に見えます。

前もって感謝します

0 投票する
5 に答える
23837 参照

c++ - ポイントセットでの最近傍探索でKDツリーが非常に遅いのはなぜですか?

ポイントセット内の最近傍を検索するために、CGAL(最新)のKDツリー実装を使用しています。また、ウィキペディアやその他のリソースは、KDツリーが進むべき道であることを示唆しているようです。しかし、どういうわけかそれらは遅すぎて、WikiはO(n)の最悪の場合の時間を示唆しています。これは理想からはほど遠いです。

[BEGIN-EDIT] 現在、「nanoflann」を使用しています。これは、K近傍検索用のCGALの同等のものよりも約100〜1000倍高速です。また、レイキャスティングには「Intel Embree」を使用しています。これは、CGALのAABBツリーよりも約100〜200倍高速です。 [終了-編集]

私のタスクは次のようになります。

私は巨大なポイントセットを持っています、例えば数百ミオまでのように。ポイント!! そして、それらの分布は、三角形分割されたジオメトリの表面上にあります(はい、フォトントレーサー)。つまり、それらの分布は3D空間では2Dであると言えます。これは、3Dではまばらですが、表面を見ると密であるためです...これは問題である可能性がありますか?私には、これがKDツリーの最悪の場合のパフォーマンスをトリガーするように思われるため、おそらく3Dの密なポイントセットをはるかにうまく処理できる可能性があります...

CGAlはそれが何をするのか非常に優れているので、それらの実装がうまくいかないのではないかと少し疑問があります。私がレイトレーシングに使用している彼らのAABBツリーは、地面の数分でまっすぐな10億のレイトレースを燃やします...それは驚くべきことだと思います。しかし、その一方で、彼らのKDツリーはmioを扱うことさえできません。妥当な時間内のポイントと25万サンプル(ポイントクエリ)...

私はKDツリーからがらくたを追い出す2つの解決策を思いついた:

1)テクスチャマップを使用して、ジオメトリ上のリンクリストにフォトンを保存します。とにかくレイキャストを実行する必要があるため、これは常にO(1)操作です...

2)ビューに依存するスライスされたハッシュセットを使用します。つまり、遠くに行くほど、ハッシュセットは粗くなります。したがって、基本的には、NDC座標で1024x1024x1024ラスターを考えることができますが、スパース領域のメモリを節約するためにハッシュセットを使用します。これは基本的にO(1)の複雑さを持ち、挿入(マイクロシャーディング)とクエリ(ロックフリー)の両方で効率的に並列化できます。

前者の解決策には、隣接するフォトンリストを平均化することがほぼ不可能であるという欠点があります。これは、ノイズを回避するために暗い領域で重要です。後者のソリューションにはこの問題はなく、KDツリーと同等の機能を備えている必要があります。O(1)の最悪の場合のパフォーマンスがあります(笑)。

それで、あなたはどう思いますか?悪いKDツリーの実装?そうでない場合、制限付き最近傍クエリのKDツリーよりも「優れた」ものはありますか?上記の2番目のソリューションに反対するものは何もありませんが、同様のパフォーマンスを提供する「実証済みの」データ構造の方が優れています。

ありがとう!

これが私が使用したコードです(ただしコンパイルできません):

0 投票する
3 に答える
6806 参照

3d - 2つのメッシュ間のハウスドルフ距離を計算します

2つのメッシュ間の偏差を見つけようとしています。たとえば、3D空間で定義された2セットのポイントの違い、およびQT3dやオープンGLベースのライブラリなどの3D視覚化ツールを使用して距離を視覚化することを計画しています。

私は2セットのメッシュ、基本的に2つの.stlファイルを持っています。私はそれらを入力として読み取るようにプログラムしました。次に、対応するメッシュ間の偏差を計算する必要があります。このため、ハウスドルフ距離が数学的なツールとして考えられることを理解しています。2つのメッシュ間のハウスドルフ距離を計算するライブラリはありますか?

私はなんとか1つのコードを見つけることができました。しかし、それ自体は多かれ少なかれプログラムです。MESHと呼ばれているので、そのまま使用したくありません。1。Cで記述されている、2。独自のアプリケーションを開発したい(もちろんライブラリを使用)。

このフォーラムで尋ねられる他の質問は、数学アルゴリズムに向けられています。私は自分でアルゴリズムを実装する予定はありません。

msvc2010(32ビット)でのプログラミングにQT5を使用しています。

よろしくお願いします

tdk。

0 投票する
1 に答える
296 参照

mesh - プラトン (アルキメデス) 立体の 3 次元点から面へのマッピング

各面のディスプレイスメント マップを適用したプラトニック (またはアルキメデス) ソリッドの結果のサーフェス メッシュを計算したいと考えています。メッシュは、ディスプレイスメント マップの詳細を表示し、水密で多岐にわたる (3D 印刷用) 必要があります。

このために、CGAL の陰関数 3D サーフェス メッシャーを使用することを考えました。次に、各ボクセル ポイントを対応する顔にマッピングし、ボクセル空間から顔に座標系変換を適用し、顔の高さフィールドを調べます。私は各面の変換行列を作成する方法を知っているので、ボクセルがソリッドに含まれているかどうかをテストするために次のアルゴリズムを考えました。

  1. 点 A に最も近い面を見つける
    • 与えられた点 A について、すべての頂点を繰り返してプラトニック (アルキメデス) 立体の 3 つの最も近い頂点を見つけ、距離を A と比較します。
    • 頂点配列の最小インデックスに従って 3 つの頂点を並べ替えます
    • 頂点インデックスから整数 (lexicographix インデックス) を作成します: (v[0] n n+v[1]*n+v[3]*1) ここで、n は頂点の数です。
    • タプルの配列 (辞書式インデックス、面) を反復処理し、同じ辞書式インデックスを持つ面を見つけます
  2. 各面には、事前に計算された変換行列と高さフィールドがあります。変換行列を適用し、高さフィールドを調べて、A がソリッドの内側か外側かを確認します

特に正しい顔を見つけるために、もっと良い解決策があると思いますか? もう 1 つのアプローチは、サーフェス メッシャーを使用せず、面からサーフェスを構築することです。各面のディスプレイスメント マップを取得し、それに変換マトリックスを適用してソリッドを構築しますが、各面メッシュを単純化し、結合する必要があります。結果がウォータータイトでマニホールドになるように (そして、ディスプレイスメント マップに特定の値がある場合、面は穴をサポートする必要があります)、陰関数を使用したボクセル ベースのアプローチが最も一般的なツールであると考えました。

0 投票する
3 に答える
13318 参照

c++ - Qt4 + CGAL - 「BOOST_JOIN」での解析エラー

Parse error at "BOOST_JOIN"Qt4 と CGAL でコードをコンパイルしようとすると、エラーが発生します。私はBoostを直接使用しておらず、すでに検索して、やなどの多くのオプションを試しまし-DBOOST_TT_HAS_OPERATOR_HPP_INCLUDED-DBOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION。私が使用しているバージョンは、CGAL 4.1.0、Qt 4.8.4_6、Boost 1.53.0_1 で、Mac OS 10.8.2 のマシンで CMake を使用して Makefile を生成しています。そのエラーの原因について何か考えはありますか?