提问人:user27665 提问时间:10/23/2023 最后编辑:marc_suser27665 更新时间:10/27/2023 访问量:50
为什么我使用 knn 的 libigl 代码需要很长时间才能完成?
Why does my libigl code using knn take forever to complete?
问:
以下代码加载网格文件,从网格创建一组随机点的向量。然后,它使用 knn 为每组随机点在网格上找到最近的点。我发现代码永远卡在 knn 步骤中。这适用于具有 50000 个点和 100000 个面的网格。如何加快速度?我的代码中是否有任何错误,如下所示:
#include <igl/read_triangle_mesh.h>
#include <igl/octree.h>
#include <igl/knn.h>
#include <igl/random_points_on_mesh.h>
#include <igl/opengl/glfw/Viewer.h>
#include <igl/get_seconds.h>
#include <iostream>
#include <cstdlib>
#include <vector>
int main(int argc, char *argv[])
{
Eigen::MatrixXd V;
Eigen::MatrixXi F;
igl::read_triangle_mesh(argv[1],V,F);
// Sample mesh for point cloud
std::cout << "no. of points, faces "<< V.rows()<<"," <<F.rows()<< std::endl;
std::vector<Eigen::MatrixXd> vec_pts;
for (int i =0;i<10;i++)
{
Eigen::MatrixXd P;
Eigen::VectorXi I;
Eigen::MatrixXd B;
igl::random_points_on_mesh(25,V,F,B,I,P);
vec_pts.push_back(P);
}
std::cout << "points created "<< std::endl;
// Build octree
std::vector<std::vector<int > > O_PI;
Eigen::MatrixXi O_CH;
Eigen::MatrixXd O_CN;
Eigen::VectorXd O_W;
igl::octree(V,O_PI,O_CH,O_CN,O_W);
std::cout << "octree created "<< std::endl;
for (int i=0;i< vec_pts.size();i++)
{
Eigen::MatrixXd query = vec_pts[i];
Eigen::VectorXi I;
const double t_before = igl::get_seconds();
igl::knn(query,1,O_PI,O_CH,O_CN,O_W,I);
const double t_after = igl::get_seconds();
std::cout << "time for knn query in sec "<< t_after - t_before << std::endl;
}
}
答: 暂无答案
评论