Создание проекта окон форм. В форму Form1 добавьте комбинированный список (comboBoxAnimals), текстовое поле (txtTimes) и кнопку (button1). см. изображение в качестве ссылки.
Form1.cs может иметь такой код:
using System;
using System.Linq;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
comboBoxAnimals.Items.Add("dog");
comboBoxAnimals.Items.Add("cat");
comboBoxAnimals.Items.Add("mouse");
comboBoxAnimals.SelectedIndex = 1;
txtTimes.Text = "1";
}
private void button1_Click(object sender, EventArgs e)
{
string selectedAnimal = comboBoxAnimals.SelectedItem.ToString();
int times = int.Parse(txtTimes.Text);
var message = string.Concat(Enumerable.Repeat(selectedAnimal, times));
MessageBox.Show(message);
}
}
}
Это далеко не идеальный пример, но я надеюсь, вы поняли идею.
Я столкнулся с этой дилеммой уже несколько месяцев и провел исчерпывающее исследование.
В основном есть 2 категории алгоритмов: вычислительная геометрия и неявные поверхности.
Они подгоняют сетку к существующим точкам.
Вероятно, наиболее известным алгоритмом этой группы является powercrust , потому что он теоретически хорошо обоснован - он гарантирует водонепроницаемость сетки.
] Ball Pivoting запатентован IBM. Кроме того, он не подходит для облаков точек с переменной плотностью точек.
Один подгоняет неявные функции в облако точек, а затем использует алгоритм, похожий на маршевый куб, для извлечения нулевого набора функции в сетку.
Методы в этой категории различаются в основном разными использовались неявные функции.
Пуассон , и MPU Хоппе - самые известные алгоритмы в этой категории. Если вы новичок в этой теме, я рекомендую прочитать диссертацию Хоппе, она очень пояснительная.
Алгоритмы этой категории обычно могут быть реализованы так, чтобы они могли очень эффективно обрабатывать огромные входные данные, и можно было масштабировать их компромисс между качеством и скоростью. Их не беспокоят шум, разная плотность точек, дыры. Недостатком их является то, что они требуют согласованно ориентированных нормалей поверхности во входных точках.
Вы найдете небольшое количество бесплатных реализаций. Однако это зависит от того, собираетесь ли вы интегрировать его в бесплатное программное обеспечение (в этом случае для вас приемлема лицензия GPL) или в коммерческое программное обеспечение (в этом случае вам нужна более либеральная лицензия). Последнее встречается очень редко.
Один находится в VTK . Я подозреваю, что его сложно интегрировать (бесплатная документация отсутствует), он имеет странную, слишком сложную архитектуру и не предназначен для высокопроизводительных приложений. Также есть некоторые ограничения для разрешенных входных облаков точек.
Взгляните на эту реализацию Пуассона, и после этого поделитесь со мной своим опытом по этому поводу.
Также: здесь - несколько высокопроизводительных алгоритмов, в том числе реконструкция поверхности.
CGAL - известная трехмерная библиотека, но она бесплатна только для бесплатных проектов. Meshlab - известное приложение с GPL.
Также (добавлено в августе 2013 г.): Библиотека PCL имеет модуль , посвященный реконструкции поверхности, и находится в активной разработке (и является частью Google Summer of Code). Модуль поверхности содержит несколько различных алгоритмов восстановления. PCL также имеет возможность оценивать нормали поверхности, если вы не предоставили их вместе с вашими точечными данными, эту функцию можно найти в модуле функций . PCL выпускается в соответствии с условиями лицензии BSD и является программным обеспечением с открытым исходным кодом, оно бесплатное для коммерческого и исследовательского использования.
Не уверен, что это именно то, что нужно для вашего случая, поскольку кажется странным, что вы его пропустили, но марширующие кубы обычно упоминаются в подобных случаях.
Вы можете начать изучать недавние работы в этой области - в настоящее время что-то вроде Быстрая MLS-реконструкция с точечной выборкой поверхностей с потоковой передачей с низким объемом памяти Джанмауро Куккуру, Энрико Гоббетти Фабио Мартон, Ренато Пахарола и Руджеро Пинтус. Его цитаты могут помочь вам довольно быстро просмотреть всю литературу.
Хотя это не представление сетки, бывший коллега порекомендовал мне эту ссылку к исходному коду метода тонкой пластины сплайна:
Кто-нибудь пробовал?
Если вы хотите провести прямые эксперименты с различными алгоритмами реконструкции поверхностей, то вам следует попробовать MeshLab, систему mesh-процессинга, она имеет открытый исходный код и содержит реализации многих из ранее цитированных алгоритмов реконструкции поверхностей, например:
Исходные тексты защищены GPL, так что вы не могли бы применять их в коммерческом проекте с закрытым исходным текстом, но очень важно получить правильное представление о свойствах различных алгоритмов реконструкции поверхностей (насколько они чувствительны к шумам, скорости, устойчивости к выбросам, как они сохраняют мелкие детали и т. д.), прежде чем приступать к реализации одного из них.