Вращение
Многие приложения CAD предоставляют функции, которые поворачивают объекты, нарисованные в клиентской области. Приложения, включающие возможности поворота, используют функцию 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'. Кроме того, в нем показаны два треугольника, сформированные линией, нарисованной от источника координат до каждой точки и линии, отрисованной из каждой точки через ось 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)