Посмотрите на элемент управления ListBox , чтобы разрешить множественный выбор.
в коде позади
foreach(ListItem listItem in lblMultiSelect.Items)
{
if (listItem.Selected)
{
var val = listItem.Value;
var txt = listItem.Text;
}
}
Метод альфа-форм, упомянутый в этом вопросе, обрабатывает общий набор точек, в которых соединения вершин неизвестны:
Есть ли эффективный алгоритм для создания 2D вогнутой оболочки?
Однако, поскольку вы уже знаете информацию о «лицах», которая может быть сохранена посредством проекции, это, вероятно, не лучший подход.
Может быть применим алгоритм грубой силы, особенно если используются структуры пространственной сортировки. например, для каждого фасета:
Другая идея, в зависимости от требуемой точности, - это просто выстрелить пучком лучей, перпендикулярно плоскости вашей проекции к вашей исходной геометрии. Создайте двумерное попадание / промах и используйте его для определения своих размеров.
I only see answers for convex solutions, so here is mine for non-convex. (Это немного сбивало с толку, каково было намерение.)
Возьмите все ребра из ваших 2D-треугольников и сгруппируйте их. Если два ребра имеют общие обе конечные точки, они находятся в одной группе. Все группы, имеющие только одно ребро, тогда являются частью оболочки.
Наконец, вы можете объединить ребра оболочки в одно кольцо, соединив их вместе.