> For the complete documentation index, see [llms.txt](https://op-al.gitbook.io/s-30-voprosy-i-dop.-voprosy/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://op-al.gitbook.io/s-30-voprosy-i-dop.-voprosy/32.-algoritmy-trekhmernoi-grafiki.-algoritm-risovaniya-karkasnykh-modelei..md).

# 32. Алгоритмы трехмерной графики. Алгоритм рисования каркасных моделей.

Операции масштабирования, переноса, поворота.

**3D модель** - математическое представление трехмерного объекта.\
**Вершина** - точка с координатами в пространстве.\
**Ребро** - отрезок, соединяющий две вершины.

### Каркасная модель

Это модель объекта в трёхмерной графике, представляющая собой совокупность вершин и рёбер, которая определяет форму отображаемого многогранного объекта.

![](https://3644367790-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FUZOUsWlbTNqsUYoinAff%2Fuploads%2FqR47amFWhjJ5EJKRjqlK%2Fimage.png?alt=media\&token=28d308d5-740d-45e6-a9ce-5b1375e490c9)

### :star: Полигональная модель

Это объект, который задается набором полигонов (иначе именуемых полигональными гранями) и потому объединяет множество таких однотипных элементов, или подобъектов, как вершины (Vertex), ребра (Edge) и грани (Face).

<figure><img src="https://3644367790-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FUZOUsWlbTNqsUYoinAff%2Fuploads%2FJek72mPJm13AKC52JxIP%2FRfTk.gif?alt=media&amp;token=e6102b67-2904-4a37-8845-c5d0bc2d30e3" alt="" width="375"><figcaption><p>Ожившая полигональная модель</p></figcaption></figure>

### Операции над моделями

* Масштабирование
* Перемещение
* Поворот относительно начала координат&#x20;

:star: Если матрицу переместить и масштабировать то у неё будут одни координаты, а если масштабировать и переместить - то другие. Это выходит из определения умножения матриц - > A\*B != B\*A.

:star: Системы координат бывают правыми и левыми. Левые  - координаты считаются по часовой стрелке, правые - против.

![](https://3644367790-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FUZOUsWlbTNqsUYoinAff%2Fuploads%2FfV7JsyKMOZsZa3Oxs4qs%2Fimage.png?alt=media\&token=9b72d7c7-1b00-467a-8b3e-5d01cad7bb42)

## Матрицы действий

Масштабирование \[x, y, z, 1]:

![](https://3644367790-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FUZOUsWlbTNqsUYoinAff%2Fuploads%2FlMFppOheWAI4BKH73siA%2Fimage.png?alt=media\&token=1f078dba-ed45-476e-b042-cef1c8a059be)

Перемещение \[x, y, z, 1]:

![](https://3644367790-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FUZOUsWlbTNqsUYoinAff%2Fuploads%2FCJaCf18ci22A5hpwk3jt%2Fimage.png?alt=media\&token=6c06630a-d6a6-424d-aaa7-3acbbea69106)

Поворот \[x, y, z, 1]:

по оX:

y' = y\*cos a + z\*sin a

z' = -y\*sin a+ z\*cos a

![](https://3644367790-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FUZOUsWlbTNqsUYoinAff%2Fuploads%2F9BzQBV3xXSbypVMvCbaT%2Fimage.png?alt=media\&token=0ea22564-32c6-4e94-a0d2-fd295198abe1)

по оY:

x' = x\*cos a

z' = x\* sin a + z\*cos a

![](https://3644367790-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FUZOUsWlbTNqsUYoinAff%2Fuploads%2F9PNwUzEGhEGAbPtiFgXo%2Fimage.png?alt=media\&token=e9561fb1-b85e-4d5c-b0fc-2ef24d38e366)

по оZ:

x' = x\*cos a + y\*sin a

y' = -sin a + cos a

## Визуализация 3D поверхности

**Поверхность** - непрерывное множество точек, координаты которых связаны в декартовой системс координат уравнением вида F(x,y,z) = 0.&#x20;

Ортогональная проекция точки А на плоскость - это точка А', полученная в месте пересечения перпендикуляра опущенного на эту плоскость и этой плоскости. Если плоскость образованна осями координат - ортогоyальная проекция обнуляет соответствующую компоненту координаты.

### :star: Ортогональная проекция 3D объекта

Это проекция на каждую из осей. На картинке понятнее:

![](https://3644367790-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FUZOUsWlbTNqsUYoinAff%2Fuploads%2FEEjj7DaWKv0TZCBXT1rr%2Fimage.png?alt=media\&token=7cca9943-cc38-405c-9f25-aa893c77bef4)

### Объекты и методы реализации 3D моделей в Qt

```c
QGraphicsScene scene; //создаем сам объект
QGraphicsView view(&scene); // поле просмотра
view.show(); //выводим
QPen pen(Qt::black); //создаем ручку чёрного цвета
scene -> addRect(0,0,200,200,pen); //создаем прямоугольник
scene -> clear(); //очистка
QPen pen(Qt::white); // снова ручка, теперь белая
scene -> addEllipse(0,0,200,200,pen); //создаем эллипс, в данном случае окружность
```
