.NET интегрируемое надежное и быстрое решение для реконструкции поверхности из трехмерного облака точек

У нас есть .NET 4.0 C # WPF, приложение для моделирования обработки. Прямо сейчас мы застряли, так как нам нужно создать трехмерную поверхность (создание сетки) из облака точек. Мы искали, гадали, тестировали различные библиотеки, чтобы найти быстрое, надежное, правильное решение, которое можно было бы интегрировать в наше приложение, но нам не повезло. Создание 3D-изображений - это не наша сфера деятельности, поэтому мы не хотим углубляться в кодирование этой части. Коммерческое решение по доступной цене также может быть для нас ответом.

До сих пор мы пробовали:

  1. VCGLib через интерфейс MeshLab, но используемый ими алгоритм (Ball Pivoting) не дал хорошего результата .

  2. Код MatLab, основанный на алгоритме PowerCrust ( MyCrust Robust ), дал хороший результат, но мы не думаем, что если мы перекодируем этот код на C #, он даст нам требуемую производительность. . Нам нужно решение, которое можно легко интегрировать в наш проект.

  3. В процессе поиска мы также нашли эти образцы приложений . Мы не знаем деталей алгоритма, используемого в этих приложениях (подробности в академической статье), но он дал результат с таким большим количеством отсутствующих сеток. Но может быть это поможет кому-то другому.

Прямо сейчас мы пытаемся изучить CGAL и выяснить, может ли он быть для нас ответом. Но поскольку установка Boost и компиляция CGAL заняли у нас два дня, мы только начали над этим работать. двойной е (двойной * х, двойной * у) {std :: cout

Я набрал следующий пример:

#include 
double f(double* x, double* y)
{
    std::cout << "val x: " << *x << "\n";
    std::cout << "val y: " << *y << "\n";
    return *x * *y;
}
double f2(double &x, double &y)
{
    std::cout << "val x: " << x << "\n";
    std::cout << "val y: " << y << "\n";
    return x * y;
}
int main()
{
    double a, b;
    a = 2;
    b = 3; 
    std::cout << f(&a, &b) << "\n";
    std::cout << f2(a, b) << "\n";
    return 0;
}   

В функции f я объявляю x и y как указатели на которое я могу получить, используя * x . При вызове f мне нужно передать адрес моих переданных аргументов, поэтому я передаю & a, & b . f2 то же самое, но определение другое.

Теперь мой вопрос: действительно ли они оба одинаковы в отношении управления памятью? Оба не копируют переданное значение, а вместо этого передают ссылку? Меня интересует f2 , потому что я не мог прочитать адрес x в f2 , поэтому я знаю больше о x и y в f (там я знаю адрес И значение).

Заранее спасибо!

Редактировать : Хорошо, спасибо, проведя еще несколько исследований, я нашел довольно полезную тему:

Указатель и ссылка Также есть ссылка на руководство по кодированию Google http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml#Reference_Arguments , что весьма полезно Я чувствую (как я теперь понятно, это форма субъективного вкуса) для большей ясности

55
задан Community 23 May 2017 в 01:54
поделиться