印刷可能な3Dシェイプ用のSTLファイルがあります。 STLファイルは、基本的に、3Dオブジェクトを表すファセット(3次元空間内に通常の三角形)でいっぱいのバッグです。各ファセットは3つの頂点と法線で表されます。STLファイルから効率的にトポロジを生成する
ハッシュテーブルを使用して、同等のすべての頂点を一致させ、その情報をトポロジカルなモデルを抽出するためにgetNearbyFacets()やcountNearbyFacets()などのリレーションシップを求めることができます。この情報は、モデルのスライスを輪郭化するときに非常に重要です。ここで
は私がverticiesにマッチした方法です:
//used to compare pointers to the vertex objects
struct lex_compare {
bool operator() (CAMu3DPoint const* lhs, CAMu3DPoint const* rhs) const{
return *lhs == *rhs;
}
};
//hash function for the verticies
struct lex_hash{
std::size_t operator()(CAMu3DPoint const* vert) const{
return
(std::hash<float>()(vert->x))^
(std::hash<float>()(vert->y))^
(std::hash<float>()(vert->z));
}
};
私はベクターにこのセットをコピーしunordered_setに、すべての頂点を突き出すファセットリストを作成したよう。頂点への参照はファセットオブジェクトに格納されています。このファセットオブジェクトによって、隣接するファセットに基づいて検索することができます。
このコードは私が望むよりも遅く実行されています。私の質問は、私はどのように私のファセット間の位相的な関係をこれより速く作ることができるのですか?
遅く何をやって実行されています。ここでは最も人気のあるものはありますか? – Slava
なぜハッシュですか?代わりに高速でなければならない整数として浮動小数点数を比較することができます。しかし、ここで最も遅いのは、コードのどこにも表示されないリストの操作です。 (任意の)軸で並べ替えると多くの助けになる可能性があります – Spektre
リストの操作はありません。不特定の順序でファセットのリストだけ。私は、同じ真実性を共有するファセット間の関係を見つけたいと思っています。 – user3853544