N-мерный многогранник


В этом разделе представлен шаблон классов WireModel, предназначенный для представления N-мерных многогранников:

#define nat16  unsigned __int16

template <nat16 N> 
class Vertex : public ShevItem
{
public:
    Vertex * vertex[N]; // указатели на соседние вершины 
    nat16    nfacet[N]; // номера образующих граней
    Double<N>  coor;    // координаты данной вершины
    double     data;    // дополнительная информация
    Vertex * tmp1, * tmp2; // служебные переменные

    Vertex & operator += ( const Double<N> & p )
    {
        coor += p;  return *this;
    }

    Vertex & operator -= ( const Double<N> & p )
    {
        coor -= p;  return *this;
    }

    Vertex & operator *= ( const Double<N> & p )
    {
        coor *= p;  return *this;
    }
};

template <nat16 N> 
class WireModel // N-мерный многограник
{
    void separat ( const Double<N+1> & g, List< Vertex<N> > & temp );
    void newVert ( List< Vertex<N> > & temp1, List< Vertex<N> > & temp2, List< Vertex<N> > & stor );
    void newLink ( List< Vertex<N> > & list );
    nat16 count;
public:
    List< Vertex<N> > vlist;

    WireModel & simplex ( double d, List< Vertex<N> > & stor );
    WireModel & cut ( const Double<N+1> & g, List< Vertex<N> > & stor );
    WireModel & cut ( const Double<N+1> & g, List< Vertex<N> > & stor, WireModel & part );
};

template <nat16 N> 
bool copy ( const WireModel<N> & a, WireModel<N> & b, List< Vertex<<N> > & stor,
            DynArrRef< SortItem <const Vertex<N> *, Vertex<N> *> > & buf );

Многогранник представляет собой список вершин (Vertex), которые имеют между собой связи ( массив указателей vertex ). Кроме того каждая вершина содержит массив номеров образующих гиперграней ( nfacet ), собственные координаты ( coor ), поле data для дополнительной информации и служебные переменные tmp1 и tmp2.
Многогранник при помощи функции-члена simplex инициализируется, как простейшая N-мерная фигура - симплекс, состоящий из N+1 граней и столько же вершин.
Две функции cut отрезают часть многограника. Первая функция отрезаемую часть отбрасывает, а вторая сохраняет в многогранике part.
Функция copy копирует один многогранник в другой.

Описание шаблона классов DynArrRef находится здесь.
Описание классов ShevItem и List находятся здесь,

Исходники находятся в файле WireModel.h.

Наверх