C++ для начинающих как повернуть отрезок вокруг его начала

  Решил я начать изучение различных преобразований и определился, что хочу начать с поворота отрезка в двумерном пространстве. Чтобы вращать объект, одного слова "вращение" мало. Нужно определиться вокруг чего вращать надо. Вот, например, в двумерном пространстве отрезок можно вращать аж тремя способами:

  Первый мой опыт попытки вращения отрезка пал на вращение относительно его начала.

  Вообще в интернете описаны матрицы-шматрицы и написано: "используйте их, и будет вам счастье в компьютерной графике". Но такие, как я, не обладают математическим знанием, поэтому использование матриц вызывает определенные затруднения. Кроме того, даже глядя на формулу поворота, мне не удавалось её подставить в код должным образом. Попытки найти пример не увенчались успехом. Но сила моя как раз в том, что ищу я упорно и чаще нахожу то, что ищу (хотя не всегда получается). Вот и попалась мне формула:

X = x1+(x2-x1)*cos(A)-(y2-y1)*sin(A)
Y = y1+(x2-x1)*sin(A)+(y2-y1)*cos(A)
(где X и Y новые координаты того конца, который вращаем)
Вот это было как раз тем, что было так нужно.

Код C++ Вращение отрезка вокруг своего начала (или конца) Первый шаг
Здесь надо определится с самим отрезком.

  Итак. Это в принципе простой код, но некоторым понадобятся пояснения. Выполняется только одна функция, в которой одна точка отрезка размещается в центр экрана, вторая точка определяется согласно длины отрезка. Так как вращение отрезка будет вокруг его начала, то значит это самое начало является центром окружности. Сам отрезок получается радиусом окружности и чтобы определить координаты его конца, нужно точку конца отрезка положить на окружность. Если координата х или y известны, то положить точку на окружность не составляет труда. В моем случае я клал по известному x. Не имеет разницы то, как строится отрезок. Если длина его неизвестна, то значит ее придется посчитать по теореме Пифагора.

Код C++ Написание функции поворота отрезка на заданный угол

  Вот можно сравнить по первому коду и увидеть некоторые изменения. В функцию поворота нужно передавать координаты двух точек (концы отрезка) и угол, на который нужно сделать поворот. Так как координаты одного конца должны менять значение, то в принимаемых параметрах внутри функции указываем их как ссылки. Обратите внимание на запоминание параметров (указанных как ссылки) во временные переменные.
Это формула, которую я отыскал. Грамотно пояснить не смогу, но скажу не очень грамотно.
Чтобы повернуть точку на произвольный угол, нужно определить позицию этой точки и только после этого поворачивать. Вот такой расчет и поворот и происходит в формуле.

  Теперь не должно составлять труда поворачивать отрезок вокруг своего начала на произвольно заданный угол. Я думаю дописывать это не обязательно и вы замечательно доделаете это на ваш вкус.

====================
  Вроде задача решена и больше ничего не нужно. Но это не совсем так. Мне, например, всегда было интересно как программировать аналоговые часы. Программировать я их тут не буду, но если присмотреться, то поворот отрезка очень напоминает стрелку с часов. Значит можно реализовать поворот стрелки. Для этого нужно использовать цикл. Я склонен считать, что этот самый цикл может вызывать затруднения, поэтому

Код С++ Поворот отрезка Аналоговые Часы Стрелка

Я рисовал стрелку расположенную фиг знает где. Если надо расположить в начальном положении, то
A.x=O.x;
A.y=O.y-R;
Добавить одну задержку в секунду после вывода первой линии в конец input().

Если нужно зациклить часы до нажатия какой-либо клавиши, то использовать вместо for

и добавить первую прорисовку циферблата (я ее не делал). Там же где прорисовка первой стрелки

======================================

Если вы усвоите этот материал, то без труда сможете реализовать свои первые часики))
Конечно могут возникнуть вопросы, так как я, пытаясь сжать информацию, пропускал разные моменты, но если хотите спросить, на то что смогу — на то отвечу.

Все комментарии на сайте проверяются, поэтому ваш комментарий может появиться не сразу. Для вставки кода в комментарий используйте теги: [php]ВАШ_КОД[/php]

4 комментария: C++ для начинающих как повернуть отрезок вокруг его начала

  • Аноним говорит:

    😥

  • Артур говорит:

    Огромное спасибо! Очень помогло

  • Анатолий говорит:

    Блин, чувак, КРЕПКО ЖМУ ТЕБЕ РУКУ!!!

    Хотел бы обратиться по имени, но не знаю как тебя звать )

    В общем, я премного благодарен, очень выручил )

    Моя задача заключается в том, что нужно поворачивать отрезок относительно центра, но глядя на твой код я решу эту задачу без проблем )

    В моем случае середина отрезка это точка начала, а поворачивать буду как бы сразу 2 отрезка (концы) на один и тот же угол ))

  • Евген говорит:

    Огромное спасибо! Выручил.

Добавить комментарий

Ваш e-mail не будет опубликован.

Поиск

 
     
Яндекс.Метрика

НАГРАДИ АВТОРА САЙТА
WEBMONEY
R375024497470
U251140483387
Z301246203264
E149319127674

Девушка-программист едет в трамвае, читает книгу. Старушка смотрит на девушку, смотрит на книгу, крестится и в ужасе выбегает на следующей остановке. Девушка читала книгу "Язык Ада"

Выражаю свою признательность

  • Максиму очень признателен за указание на мои ошибки и неточности.
  • Sergio ===> за оказание помощи в исправлении моих ошибок
  • Gen ===> за правильное стремление помочь другим новичкам и выявления моих ошибок