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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.11.2012, 18:58   #1
vslinko
Новичок
Джуниор
 
Регистрация: 19.11.2012
Сообщений: 1
По умолчанию

Никак не могу решить задачу.

Дано:
x, y — координаты прямоугольника
width, height — размеры прямоугольника
angle — угол поворота прямоугольника относительно оси x

Необходимо вычислить координаты вершин прямоугольника, т.е. AxAy BxBy CxCy DxDy.

Искал по форуму — не получилось найти ответ.

Буду очень признателен если наведете меня на функцию аля

func(x, y, w, h, a) {
return AxAy BxBy CxCy DxDy;
}

Заранее большое спасибо!

Забыл написать, после терзаний было придумано это:
Код:
Mx,My - координаты середины                        
L - угол наклона                                   
                                                   
B = высота_прямоугольника * cos( L )               
A = ширина_прямоугольника * cos( 180-90-L )        
Z = высота_прямоугольника * sin( L )               
W = ширина прямоугольника * sin( 180-90-L )        
                                                   
Bx = Mx + (A+B)/2                                  
By = My + (Z+W)/2                                  
                                                   
Ax = Bx - A                                        
Ay = By - W                                        
                                                   
Dx = Mx - (A+B)/2                                  
Dy = My - (Z+W)/2                                  
                                                   
Cx = Dx + A                                        
Cy = Dy + W
Но это не работает корректно

Последний раз редактировалось Stilet; 19.11.2012 в 19:32.
vslinko вне форума Ответить с цитированием
Старый 19.11.2012, 22:04   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

декартовы и полярные координаты
1) y0 = r * sin a
2) x0 = r * cos a

в полярных координатах поворот на угол b относительно центра координат это просто a1 =a+b

обратно в декартовы координаты
3) y1 = r * sin a1 = r * sin (a+b)
4) x1 = r * cos (a+b)

косинус суммы углов
5) cos(a+b) = sin(a) * cos(b) + cos(a) * sin(b)

берем (4), подставляем (5), раскрываем скобки, применяем (1) и (2), получаем требуемое.

для другой координаты (3) потребуется синус суммы, см. учебник тригонометрии google.

P.S. Да еще перемещаем центр координат в точку поворота (Xt,Yt)
X0 =X00 -Xt
и обратно
x11 =X1 +Xt

Цитата:
Искал по форуму — не получилось найти ответ.
теперь есть!
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 20.11.2012 в 08:58.
evg_m вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Найти все вершины графа sergei15 Паскаль, Turbo Pascal, PascalABC.NET 0 28.05.2012 19:33
Найти все пути, соединяющие две вершины ориентированного графа. dasterse Помощь студентам 0 13.05.2012 18:38
по трём координатам вершин прямоугольника найти координаты четвёртой вершины (Delphi) MaDDi Помощь студентам 7 14.02.2012 22:11
найти вершины квадрата dimon131 Общие вопросы C/C++ 7 23.12.2010 12:04
найти все клики содержащие 4 вершины samazvanka Помощь студентам 0 01.06.2010 19:55