Поворот
Многие приложения САПР предоставляют функции, которые вращаются объекты, нарисованные в клиентской области. Приложения, включающие возможности поворота, используют функцию SetWorldTransform , чтобы задать соответствующее преобразование мирового пространства в пространство страницы. Эта функция получает указатель на структуру XFORM, содержащую соответствующие значения. Элементы eM11, eM12, eM21 и eM22 XFORM указывают соответственно косиус, синус, отрицательный синус и косиус угла поворота.
При повороте точки, составляющие объект, поворачиваются относительно координатного пространства. На следующем рисунке показан прямоугольник 20 на 20 единиц, повернутый на 30 градусов при копировании из мирового пространства в пространство с координатами страницы.
На предыдущем рисунке каждая точка прямоугольника была повернута на 30 градусов относительно координатного пространства.
Следующий алгоритм вычисляет новую координату X (x ') для точки (x,y), которая повернута на угол A относительно координатного пространства.
x' = (x * cos A) - (y * sin A)
Следующий алгоритм вычисляет координату y (y ') для точки (x,y ), которая повернута на угол A относительно источника.
y' = (x * sin A) + (y * cos A)
Два преобразования поворота можно объединить в матрицу 2 на 2, как показано ниже.
|x' y'| == |x y| * | cos A sin A|
|-sin A cos A|
Матрица 2 на 2, которая вызвала поворот, содержит следующие значения.
| .8660 .5000|
|-.5000 .8660|
Алгоритмы поворота основаны на теореме сложения тригонометрии, в которой говорится, что тригонометрическая функция суммы двух углов (A1 и A2) может быть выражена в терминах тригонометрических функций двух углов.
sin(A1 + A2) = (sin A1 * cos A2) + (cos A1 * sin A2)
cos(A1 + A2) = (cos A1 * cos A2) - (sin A1 * sin A2)
На следующем рисунке показана точка p, повернутая против часовой стрелки в новое положение p'. Кроме того, он показывает два треугольника, сформированные линией, отрисованной от начала координатного пространства до каждой точки, и линией, нарисованной от каждой точки по оси X.
С помощью тригонометрии координату x точки p можно получить, умножив длину гипотенузы h на косиус A1.
x = h * cos A1
Координату Y точки p можно получить, умножив длину гипотенузы h на синус A1.
y = h * sin A1
Аналогичным образом координату x точки p' можно получить путем умножения длины гипотенузы h на косисинус (A1 +A2 ).
x' = h * cos (A1 + A2)
Наконец, координату Y точки p' можно получить, умножив длину гипотенузы h на синус (A1 +A2 ).
y' = h * sin (A1 + A2)
Используя теорему сложения, предыдущие алгоритмы становятся следующими:
x' = (h * cos A1 * cos A2) - (h * sin A1 * sin A2)
y' = (h * cos A1 * sin A2) + (h * sin A1 * cos A2)
Алгоритмы поворота для заданной точки, повернутой на угол A2, можно получить, подставив x для каждого вхождения (h * cos A1 ) и заменив y для каждого вхождения (h * sin A1 ).
x' = (x * cos A2) - (y * sin A2)
y' = (x * sin A2) + (y * cos A2)