Персональная страничка
Диканева Тараса
Викторовича

Главная \ Преподавательское \ Программирование для начинающих

13. Графика в Паскале

Предыдущий раздел:

Следующий раздел:

13.7. Сдвиг и поворот

Сдвиг на вектор с координатами (dx,dy) заключается в добавлении этих координат к координатам каждой точки сдвигаемого объекта:

  x_s'=x_s+dx,\\  y_s'=y_s+dy.

Часто удобно задавать вектор сдвига его длиной и углом поворота (r,\varphi), что как не трудно заметить, означает сдвиг на вектор с координатами:

  dx=r\cos\varphi,\\  dy=r\sin\varphi.

Поскольку речь идет о сдвиге точки на экране, то для ее прорисовки полученные значения надо округлить до целых. Однако если преобразование сдвига выполняется неоднократно или, за сдвигом следует другие преобразования (например, поворот), то округления, если они делаются после каждого преобразования, будут приводить к накоплению ошибки. Поэтому если координаты преобразуются несколько раз лучше хранить их в вещественных переменных, а округления делать только непосредственно перед рисованием.

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

Координаты точек при повороте на угол \varphi относительно начала координат преобразуются по закону

  x'_s=x_s\cos\varphi-y_s\sin\varphi,\\  y'_s=x_s\sin\varphi+y_s\cos\varphi.

Или в матричном виде:

  \begin{pmatrix}  x'_s\\  y'_s  \end{pmatrix}=  \begin{pmatrix}  \cos\varphi & -\sin\varphi\\  \sin\varphi & \cos\varphi  \end{pmatrix}  \begin{pmatrix}  x_s\\  y_s  \end{pmatrix}

Чтобы осуществить поворот относительно произвольной точки (x_0,y_0) необходимо сделать сдвиг, который перенесет эту точку в начало координат (dx=-x_0,~dy=-y_0). После этого надо сделать поворот на требуемый угол и снова сделать сдвиг, который вернет бывшую точку (x_0,y_0) на место (см. рис.).

Рис. 2. Поворот относительно произвольной точки состоит из сдвига, перемещающего эту точку в начало координат, поворота вокруг начала координат и сдвига, возвращающего центр вращения в исходное место.

Нетрудно записать такое преобразование одной формулой:

  x_s'=(x_s-x_0)\cos\varphi-(y_s-y_0)\sin\varphi+x_0,\\  y_s'=(x_s-x_0)\sin\varphi+(y_s-y_0)\cos\varphi+y_0.

Следующий раздел:

Предыдущий раздел:

1 комментарий

Добавить комментарий