Прочитать на английском

Поделиться через


Поворот

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

схема, показывающая источник p и p', и два треугольника

С помощью тригонометрии координату 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)