Как повернуть квадрат на 45 градусов
БлогNot. Как повернуть многоугольник на заданный угол в C++ и Mathcad
Как повернуть многоугольник на заданный угол в C++ и Mathcad
Решая задачи, мы привыкли задавать прямоугольники или квадраты на плоскости со сторонами, параллельными осям координат, между тем, часто в расчётах требуется и «повёрнутое» расположение объекта.
В этой заметке показан код для «поворота» произвольного многоугольника, заданного матрицей координат вершин (первый столбец — x-координаты, второй столбец — y-координаты) относительно точки x_pivot , y_pivot на заданный в градусах угол angle .
На C++ речь идёт только о вычислении новых координат вершин, в документе Mathcad построен также график. Тестовый объект — квадрат, показанный на картинке красным цветом. Чтобы проверить функцию, дважды выполняется поворот квадрата на угол в 45 градусов.
Листинг программы на C++, проверенной в консоли Visual Studio 2019:
Вывод этой программы:
график примера в Mathcad
- В отличие от кода C++, вращающего массив координат вершин «на месте», функция Mathcad возвращает новый массив координат вершин pr .
- Предполагается, что системное значение ORIGIN (начало нумерации элементов массивов) не менялось и равно нулю.
- Массив pointsC нужен, чтобы «замкнуть» многоугольник, добавив в конец списка вершин дополнительную вершину, совпадающую с первой.
Про отображение многоугольника на графике Mathcad было также в этой заметке, как «подключить» число пи в Visual Studio было здесь.
Как повернуть квадрат на 45 градусов
Если вы нашли ошибку или неработающую ссылку, пожалуйста, сообщите нам – сделайте свой вклад в развитие проекта. 


Для просмотра видео нажмите на картинку.
- Как сделать калейдоскоп из любой фотографии.
- Как настраивать и пользоваться линейками.
- Как Guides (Направляющие) помогают точно перемещать объекты.
- Как пользоваться инструментом Move (Перемещение).
- Как изменять размер холста.
В этом небольшом уроке мы закрепим тему, начатую в предыдущем. Создадим калейдоскопы, используя инструменты трансформации, линейки и направляющие. 
Выберите красочную фотографию. Если в окне программы, сверху и слева линейки
отсутствуют, то их необходимо сделать видимыми. Для этого зайдите в меню View (Просмотр) и поставьте галочку напротив Rulers (Линейки) или нажмите Ctrl + R. Теперь настройте единицы измерения, щелкнув правой кнопкой мыши по линейке, появится список,
в котором отметьте галочкой Пикселы. А так же в меню View (Просмотр) отметьте галочкой Snap (Привязка) и Snapto (Привязать к) – Guides (Направляющим).
В нижнем левом углу окна программы показывается необходимая информация.
Щелкните по стрелочке для выбора той информации, которая вас в данный момент может интересовать. Нам для работы необходимы данные о размере документа. Для более детальной информации можно воспользоваться инструментом для изменения размера изображения.
В меню выберите Image (Изображение) – ImageSize (Размер изображения). Посмотрите на параметры ширины и высоты в разделе PixelDimensions (Размерность), а так же обратите внимание на Resolution (Разрешение). Запомните эти значения, они нам пригодятся.
Выберите инструмент Rectangularmarquee (Прямоугольная область). Стиль задайте FixedSize(Заданный размер). Проставьте в графах ширина и высота по 1500 пикселей. Это значение зависит от размера фотографии. Если фото маленькое, берите значение поменьше. Выберите контрастный участок на фотографии и сделайте прямоугольное выделение.
Переключитесь на инструмент
прямолинейное лассо в панели параметров
выберите режим вычитание
проведите диагональ из верхнего левого угла и с небольшим отступом от нижнего и левого края замкните контур. Останется выделение в форме правильного треугольника. Скопируйте его Ctrl + C. .
Настал момент создать новый файл. В меню File (Файл) выберите New (Создать…) или нажмите Ctrl + N. Размер выделения был 1500 пикселей, новый документ должен стать
в два раза больше, а разрешение у них должно быть одинаковым (помните, я просила вас запомнить эти параметры).
Вставьте скопированное выделение в новый документ, нажав Ctrl + V.
Выберите инструмент
Move (Перемещение) и перетащите треугольник в левый верхний сектор. Что бы создать дубликат слоя, в палитре слои перетащите слой 1 на значок
(Создать новый слой).

Меню Edit (Редактирование) – Transform (Трансформирование) –FlipVertical (Отразить по вертикали). Подведите курсор к углу
, и поверните треугольник вокруг опорной точки.
Или меню Edit (Редактирование) – Transform (Трансформирование) –Rotate 180 (Поворот на 180°). Нажмите Enter, чтобы выйти из режима трансформирования. В палитре слои, зажав Shift, выделите оба слоя. Слейте оба слоя вместе CTRL + E или щелкнув правой кнопкой мыши, выберите MergeLayers ( Объединить слои ).
Затем отразите по горизонтали Edit (Редактирование) – Transform (Трансформирование) – Flip Horizontal (Отразить по горизонтали) и разместите копию справа при помощи инструмента
Move (Перемещение). Клавиша Shift поможет передвинуть квадрат по прямой линии. Выделите слои и слейте их вместе Ctrl +E.

Сразу скажу, что изменение размера холста не влияет на качество изображения. Увеличивая холст мы добавляем новые пиксели, причем их цвет будет соответствовать цвету заднего плана, установленному в данный момент в панели инструментов. Уменьшая холст мы отсекаем изображение подобно кадрированию инструментом Crop (Рамка). 
Повернуть точки квадрата?
Допустим есть квадрат. Сейчас его угол поворота равен 0. Одна из его точек при угле 0 находится на координате (-0.5; 0.0; 0.5). Теперь допустим я его хочу повернуть на 45.0 градусов по R(otation)Y (Y высота)
Вот начальное положение (вид сверху):

И вот эти координаты ? мне нужно найти исходя из угла 45.

Ну и можно пожалуйста формулу для поворота по RX, RZ (я так понимаю там нужно как-то с sin cos tan играться). Спасибо всем.
- Вопрос задан более трёх лет назад
- 1760 просмотров
- Вконтакте
Вместо Y — подставьте Z и получите то, что нужно Вам.
Поворот вокруг центра:
X = x * cos(alpha) — y * sin(alpha);
Y = x * sin(alpha) + y * cos(alpha);
Общая формула:
X = (x — x0) * cos(alpha) — (y — y0) * sin(alpha) + x0;
Y = (x — x0) * sin(alpha) + (y — y0) * cos(alpha) + y0;
HTML 5, HOWTO загрузить изображение квадрата или нарисовать простой квадрат и повернуть его на 45 градусов
Это должно быть просто . но не могу понять: я использую функцию поворота для 1-го прямоугольника, но я получаю поворот 2-го прямоугольника ?? 🙁 Обновил код после ответа Ремми Шарпа. Но теперь коробка исчезла. Я просто хочу, чтобы одна из двух коробок вращалась в своей точке регистрации.
Я думаю тебе стоит .rotate() до .stroke() на рект. # 1, а затем сбросьте ориентацию до .stroke() на рект. № 2. — jensgram
1 ответы
Нет, вы рисуете холст и первый прямоугольник, когда делаете первый context.stroke — это сразу закрашивает пиксели.
Затем вы преобразуете систему координат с помощью context.rotate , а затем любое последующее рисование на холсте использует новую преобразованную систему координат (и, следовательно, почему вторая краска поворачивается).
И причина второй прямоугольник повернут (даже если у вас есть второй холст). у вас есть опечатка:
So context2 на самом деле такой же, как ваш context переменная в вашем примере.
Вы также заметите, что когда вы обновляете код с указанным выше исправлением, поворот становится слишком большим — вы захотите перевести 0,0 центральную точку перед вращением, чтобы получить эффект (я думаю), который вы хотите.