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

Как повернуть отрезок вокруг его середины? Голова сломаться может от матриц, шматриц и тонны бесполезной информации. Матрицы поворотов нужны, конечно, просто в купе к ним по сайтам всякой ненужной фигни набросано.

  • Чтобы поворачивать отрезок вокруг своего центра, нужно в первую очередь найти координаты этого его центра

Координаты центра отрезка на плоскости найти очень легко, нужно найти две точки: абсциссу (точку Х), ординату (точку Y). Придумали же названий. Есть отрезок, у него две точки, одна точка — точка его начала, другая точка — точка его конца. У каждой точки есть внутри два обозначения. Одно X, другое Y.

Вычисляется центр по формуле:

  • X = (X0 + X1) / 2;
    Y = (Y0 + Y1) / 2;

Для примера:
Отрезок (5,90;99,200);
Первая точка отрезка (5,90), вторая (99,200).
X = (5 + 99) / 2 = 52;
Y = (90 + 200) / 2 = 145;

Точка центра == (52,145);

Вот и вся премудрость нахождения. Просто не все это знают.

  • Чтобы поворачивать отрезок вокруг своего центра, нужно вращать точку его начала и точку его конца вокруг точки его центра

Вокруг произвольной точки (x0,y0) точку можно повернуть используя формулу:

  • xn = -sin(alpha)*(y-y0)+cos(alpha)*(x-x0)+x0;
    yn = cos(alpha)*(y-y0)+sin(alpha)*(x-x0)+y0;

Здесь:
xn и yn — это две единые составляющие новой координаты. (Просто новый Х и новый Y)
x и y — это две единые составляющие координаты той точки, которая вращается (будет вращаться).
x0 и y0 — это две единые составляющие координаты той точки, вокруг которой вращается другая точка. (в нашем случае это две единые составляющие координаты центра отрезка)
alpha — угол, на сколько вращаем.

Это всё, что достаточно знать для вращения отрезка на плоскости вокруг своего центра.

В примере использовано рисование с помощью WinApi.

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

Во время перерисовки лучше, чтобы функция стирания шла непосредственно перед функцией рисования, разделяясь обновлением координат. В противном случае вычисления могут повлиять на время работы, и это может сказаться, например на плавности анимации.

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

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

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

Поиск

 
     

Случайная книга в электронном формате

Яндекс.Метрика
НАГРАДИ АВТОРА САЙТА
WEBMONEY
R375024497470
U251140483387
Z301246203264
E149319127674

Демотиватор исходники есть?

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

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