Написать программу, которая демонстрирует некоммутативность операций:

масштабирования  и вращения.

Некоммутативность – это зависимость произведения от порядка сомножителей, то есть a*b ¹ b*a. В данном задании некоммутативность операций масштабирования и вращения также означает, что результат может получиться разным, в зависимости от того, какая операция будет произведена первой.

Вспомним, что как реализуются преобразования точки и фигуры в 2хмерном пространстве:

Преобразование точки

Точка на плоскости представляется двумя координатами: |x y|. Матрица преобразования точки выглядит так:

Ниже показано преобразование точки через квадратную матрицу; здесь xn = xa + yc и yn = xb + yd — новые координаты точки после преобразования:

Преобразование фигуры

Если представить фигуру как совокупность точек, то можно провести и ее преобразование. В следующем примере задано четыре точки: A(0, 0), B(1, 0), C(1, 1), D(0, 1), каждая из которых после преобразования переходит соответственно в A*(0, 0), B*(a, b), C*(a + c, b + d), D*(c, d):

(Мишенин О.И., Компьютерная графика, уч. пособие, 2004)

В случае масштабирования

a = kx  - коэффициент масштабирования по оси x

d = ky - коэффициент масштабирования по оси y

b = c = 0

А в случае поворота на угол a

a = d = cos(a)

b = sin(a)

c = - sin(a)

Таким образом, для получения новых координат точки нужно умножить вектор, представляющий эту точку, на матрицу преобразования. Так как операции матричного умножения некоммутативны, то из этого следует что и преобразования некоммутативны. В частном случае они могут быть коммутативны, например если при масштабировании коэффициенты по осям x и y равны между собой.

Программа демонстрирует это: над фигурой, состоящей из точек, производятся операции масштабирования и поворота. При этом видно, что конечный результат зависит от того, какая операция была произведена первой.

Написать программу построения плоской кривой, содержащей узлы. Использовать В-сплайны

Полученная гладкая кривая называется кубическим сплайном. Термин «сплайн» возник по аналогии: это название чертежного инструмента — тонкой металлической линейки, которая может изгибаться так, чтобы проходить через заданные точки. Физически такая кривая минимизирует энергию внутренних напряжений. Математически — имеет минимальную среднеквадратичную кривизну, то есть она наиболее гладкая. Сплайны имеют много приложений в конструировании криволинейных форм.

Сплайн может не проходить через узлы, но при этом проходит наиболее близко к ним.

Программа демонстрирует ломаную линию и сплайн, который гладко следует изгибам линии. Видно, что сплайн не достает до начальной и конечной точек – его задача не в этом, а в том, чтобы гладко отработать изгибы.

Написать программу для изображения многоугольника, вращающегося в пространстве

Программа хранит координаты фигуры (точнее, её вершин, объединенных в грани) в трехмерном пространстве. Эти координаты привязаны к системе координат, которая называется система координат фигуры. Для отображения вращения координаты пересчитываются в глобальную систему координат. В ней уже содержатся координаты фигуры, которая была повернута на определенный угол. При этом по направлению нормали к плоскости грани определяется, видна эта грань (нормаль направлена на зрителя) или не видна, чтобы отрисовывать её сплошной или пунктирной линией. После этого трехмерные глобальные координаты пересчитываются в экранные, используя проекцию «перспектива с 2мя точками схода», которые используются для отображения на экране.

Несколько раз в секунду значение угла поворота изменяется, заново пересчитываются глобальные координаты, определяется видимость граней, пересчитываеются и используются для отображения двухмерные координаты на экране.