Вы знаете, как получить пересечение (соответствующий) тома/сетки двух многоугольных сеток, состоящих из множества граней и вершин в Matlab?Как получить объем пересечения двух сеток (граней и вершин)?
ответ
Я не знаю встроенного метода MATLAB для этого. Но через функции mex вы можете использовать ready-made C++ libraries.
В следующем примере используется libigl's boolean mesh operation.
Это некоторая зависимость, я установил их на Ubuntu Linux с помощью:
$ sudo apt-get install libcgal-dev git mercurial
$ cd /opt/
$ hg clone https://bitbucket.org/eigen/eigen/
$ git clone https://github.com/libigl/libigl.git
get_intersection_mesh.cpp
#include "mex.h"
#include <Eigen/Core>
#include <igl/matlab/prepare_lhs.h>
#include <igl/matlab/parse_rhs.h>
#include <igl/boolean/mesh_boolean.h>
void mexFunction(
int nlhs,
mxArray *plhs[],
int nrhs,
const mxArray *prhs[]
)
{
using namespace Eigen;
if (nrhs != 4)
{
mexErrMsgIdAndTxt("MATLAB:mexcpp:nargin",
"get_intersection_mesh requires 4 input parameters: F1, V1, F2, V2");
}
if (nlhs != 2)
{
mexErrMsgIdAndTxt("MATLAB:mexcpp:nargout",
"get_intersection_mesh requires 2 output parameters: F, V");
}
MatrixXd V1, V2, V_i;
MatrixXi F1, F2, F_i;
// read input meshes
igl::matlab::parse_rhs_index(prhs+0, F1);
igl::matlab::parse_rhs_double(prhs+1,V1);
igl::matlab::parse_rhs_index(prhs+2, F2);
igl::matlab::parse_rhs_double(prhs+3,V2);
// calculate intersection
igl::boolean::mesh_boolean(V1,F1,V2,F2,igl::boolean::MESH_BOOLEAN_TYPE_INTERSECT,V_i,F_i);
// write output
igl::matlab::prepare_lhs_index(F_i,plhs+1);
igl::matlab::prepare_lhs_double(V_i,plhs);
}
Вы скомпилировать его в MATLAB с помощью:
mex get_intersection_mesh.cpp -I/opt/libigl/include -I/opt/eigen -lboost_thread -lCGAL -lmpfr -lgmp -lboost_system
Вы бы затем использовать его как это:
[V_i, F_i] = get_intersection_mesh(fv1.faces, fv1.vertices, fv2.faces, fv2.vertices);
% plot intersection mesh
patch('Faces',F_i,'Vertices',V_i, 'FaceColor','w');
Спасибо за ваш ответ. Моя среда разработки теперь не такая же, как у вас. Могу ли я получить все скомпилированные файлы для использования функции get_intersection_mesh() Matlab? Я просто хочу сначала проверить эту функцию с помощью своих наборов данных. –
@JoonAn Нет необходимости компилировать его самостоятельно, так как зависимости должны быть одинаковыми, операционная система должна соответствовать и т. Д. –
- 1. threejs: оптимизация вершин и граней
- 2. MySQL вершин и ребер пересечения
- 3. Как получить общую часть двух плоских сеток?
- 4. Создание граней только из вершин?
- 5. пересечение двух треугольных сеток
- 6. THREE.BufferGeometry - нормалей вершин и нормали граней
- 7. Three.js - морфинг геометрии и рафинирование треугольных сеток
- 8. Множество сеток в одном буфере вершин?
- 9. Получить размер пересечения двух геометрий
- 10. Наложение двух сеток
- 11. (Численно) вычислить пересекающийся объем двух кубоидов
- 12. Как получить точку пересечения двух векторов?
- 13. Как получить индексный буфер с граней .obj?
- 14. Как узнать количество ребер, граней, вершин в многоугольнике
- 15. Геокодирование пересечения двух дорог
- 16. Как обнаружить пересечение двух граней в 3D
- 17. Как реализовать VBO для больших сеток и получить гладкую анимацию?
- 18. Поиск пересечения двух сфер
- 19. Поиск пересечения двух массивов
- 20. Расчет рефлексии и пересечения вершин, OpenCL vs GLSL
- 21. MATLAB: пересечения двух коник
- 22. Отображение пересечения двух выражений
- 23. Three.js - Создайте новую сетку из определенных граней/вершин другой сетки
- 24. Точка пересечения двух линий
- 25. C++ - Поиск пересечения двух диапазонов
- 26. Определение точки и угла пересечения двух окружностей.
- 27. Как добраться до пересечения двух CGPath?
- 28. Свертывание двух сеток в matlab и получение сдвинутого вывода
- 29. Алгоритм оптимального «пересечения» двух результатов?
- 30. Как сделать прямой от пересечения двух?
что вы уже пробовали? –
У меня есть два набора (многоугольные сетки) граней и вершин. Каждая сетка (вершины и грани) имеет объем пересечения. Поэтому я хотел бы получить объем пересечения двух сеток. –
Как выглядит ваш код в формате matlab? каковы ваши входные данные? –