Как повернуть квадрат на 45 градусов

от admin

Как повернуть квадрат на 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 пикселей, новый документ должен стать
в два раза больше, а разрешение у них должно быть одинаковым (помните, я просила вас запомнить эти параметры).

Читать:
Как покрасить одну букву в html

Вставьте скопированное выделение в новый документ, нажав 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 высота)

Вот начальное положение (вид сверху):

gtpAryW.png

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

b3KG6uJ.png

Ну и можно пожалуйста формулу для поворота по RX, RZ (я так понимаю там нужно как-то с sin cos tan играться). Спасибо всем.

  • Вопрос задан более трёх лет назад
  • 1760 просмотров
  • Facebook
  • Вконтакте
  • Twitter

Вместо 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 центральную точку перед вращением, чтобы получить эффект (я думаю), который вы хотите.

Похожие статьи