У меня есть 3D-модель, представленная примерно так:
class Vertex
{
double x, y, z;
}
class Edge
{
Vertex *v1, *v2; // no particular order
Face *f1, *f2; // no particular order. f2 may be null.
}
class Face
{
List<Vertex*> vertices; // clockwise order
List<Edge*> edges; // clockwise order
}
class Model
{
List<Face*> faces;
List<Vertex*> vertices;
List<Edge*> edges;
}
Конечно, это может быть преобразовано в любое наиболее удобное представление.
Я хочу разделить эту модель на несколько несвязанных частей по нескольким петлям соединенных ребер и создать новые грани, чтобы закрыть концы. Пример с одним циклом:
Новые лица должны находиться в том же положении и идентичны, за исключением их соединения с другими лицами, но для этого примера я раздвинул их. Как я мог это сделать?
Не имеет значения, являются ли вершины общими для несвязанных частей.
Поскольку каждое ребро соединяет ровно две грани, я попытался разделить каждое ребро по отдельности на две копии (по одной для каждой грани). Это действительно разделяет модель по мере необходимости, но тогда я не вижу способа правильно добавить новые лица.
Этот вопрос помечен как граф-алгоритм, потому что эта проблема кажется так или иначе связанной с теорией графов.