Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.02.2009, 00:15   #1
ROD
Linux C++ Qt ARM
Старожил
 
Аватар для ROD
 
Регистрация: 30.11.2008
Сообщений: 3,030
По умолчанию Вопрос по математической стороне алгоритма.

Известна точка O(x0,y0) - точка вокруг которой вращается другая точка, в данной системе координат
известна точка A(x1,y1) - начальное положение точки в данной системе кординат
известен угол поворота точки A(x1,y1) относительно точки вращения O(x0,y0)

Как отсюда найти точку B(x2,y2), которая является результатом поворота точки A(x1,y1) вокруг точки O(x0,y0) на a градусов (или радиан, не столь важно).


У меня какие-то мысли в голове были, однако выведеная геометрически формула оказалась (вроде бы) не правильной.

Вот мое то, чтоя получил с помощью окружности радиусом R (как выяснилось он роли не играет)

x2=x1*cos(a)+y1*sin(a)
y2=y1*cos(a)+x1*sin(a)

P.S.

Просьба мою глупость списывать на сонливость, ибо уже ночь.
Дилетант широкого профиля.

"Слова ничего не стоят - покажите мне код!" © Линус Торвальдс

Последний раз редактировалось ROD; 04.02.2009 в 00:19.
ROD вне форума Ответить с цитированием
Старый 04.02.2009, 02:32   #2
counter
Участник клуба
 
Регистрация: 18.10.2008
Сообщений: 1,409
По умолчанию

значит так

точку О примем за начало координат т.е. О(0,0), При повороте точки расстояние до нее от центра вращения не меняется и равно

R^2 = x1^2 + y1^2 =x1^2

а координаты точки B :

x2 = R * cos (a)
y2 = R * sin (a)

вот впринципе и все...

я конечно не художник...
нарисовал как мог...
Изображения
Тип файла: jpg Безымянный.jpg (21.0 Кб, 150 просмотров)
counter вне форума Ответить с цитированием
Старый 04.02.2009, 07:55   #3
ROD
Linux C++ Qt ARM
Старожил
 
Аватар для ROD
 
Регистрация: 30.11.2008
Сообщений: 3,030
По умолчанию

Во, спасибо, так получилось...

По теореме Пифагора находится радиус...

И еще в твое выражение прибавляются соответствующая координата оси вращения.

т.е.

x2 = R * cos (a) + x0;
y2 = R * sin (a) = y0;

Спасибо.

P.S.

Жалко, что графические примитивы, типа прямоугольника, он не переворачивает, а просто искажает, но с линиями вроде бы работает.
Дилетант широкого профиля.

"Слова ничего не стоят - покажите мне код!" © Линус Торвальдс

Последний раз редактировалось ROD; 04.02.2009 в 08:12.
ROD вне форума Ответить с цитированием
Старый 04.02.2009, 12:44   #4
counter
Участник клуба
 
Регистрация: 18.10.2008
Сообщений: 1,409
По умолчанию

насчет прямоугольников :поидее , зная размеры прямоугольника, достаточно повернуть две точки а остальное дорисовать

ливоповорачивать все точки относительно точки пересечения его диагоналей
Изображения
Тип файла: jpg Безымянный.jpg (11.0 Кб, 152 просмотров)
counter вне форума Ответить с цитированием
Старый 04.02.2009, 15:02   #5
ROD
Linux C++ Qt ARM
Старожил
 
Аватар для ROD
 
Регистрация: 30.11.2008
Сообщений: 3,030
По умолчанию

Просто получается прямоугольник не повернутый, а смещеный и искаженый. (просто из-за того, что его строят по двум точкам, что бы таких чудес небывало нужно хотя бы три точки).

Вобщем на рисунке показано какой прямоугольник строится по полученой при повороте диагонали.

Видимо придется придумать свой алгоритм для рисования прямоугольника.
Изображения
Тип файла: jpg Пояснение.JPG (11.1 Кб, 141 просмотров)
Дилетант широкого профиля.

"Слова ничего не стоят - покажите мне код!" © Линус Торвальдс

Последний раз редактировалось ROD; 04.02.2009 в 15:16.
ROD вне форума Ответить с цитированием
Старый 04.02.2009, 17:13   #6
MaTBeu
Eclipse Foundation
Старожил
 
Аватар для MaTBeu
 
Регистрация: 19.09.2007
Сообщений: 2,604
По умолчанию

А вы слышали про афинные преобразования? Я думаю это самое оно - и выдумывать ничего не нужно.
MaTBeu вне форума Ответить с цитированием
Старый 04.02.2009, 17:24   #7
ROD
Linux C++ Qt ARM
Старожил
 
Аватар для ROD
 
Регистрация: 30.11.2008
Сообщений: 3,030
По умолчанию

Откровенно говоря впервые слышу. Уже тянусь к кнопке поиска...
Дилетант широкого профиля.

"Слова ничего не стоят - покажите мне код!" © Линус Торвальдс
ROD вне форума Ответить с цитированием
Старый 04.02.2009, 17:40   #8
MaTBeu
Eclipse Foundation
Старожил
 
Аватар для MaTBeu
 
Регистрация: 19.09.2007
Сообщений: 2,604
По умолчанию

Афинные преобразования - это когда у тебя все фигуры представлены в виде матриц точек. И ты умножением на соответствующую матрицу (поворот, перемещение, масштабирование), поворачиваещь, перемещаешь или масштабируешь изображение.
MaTBeu вне форума Ответить с цитированием
Старый 04.02.2009, 17:44   #9
ROD
Linux C++ Qt ARM
Старожил
 
Аватар для ROD
 
Регистрация: 30.11.2008
Сообщений: 3,030
По умолчанию

ага.. уже в общих чертах представляю что это.
Дилетант широкого профиля.

"Слова ничего не стоят - покажите мне код!" © Линус Торвальдс
ROD вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Элементы математической логики. Высказывания Vesnushka18 Помощь студентам 1 11.04.2008 17:40
по правой стороне поля, при печати, делает полосу Виктор1966 Свободное общение 1 11.03.2008 13:08
Проверка размера файлов на стороне клиента (работа) AndreyAndrey Фриланс 5 02.11.2007 19:13
Сложность Алгоритма PChEL@ Помощь студентам 3 26.05.2007 07:56