Форум программистов, компьютерный форум CyberForum.ru

Вращение фигуры - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.62
a91
 Аватар для a91
4 / 4 / 0
Регистрация: 03.04.2009
Сообщений: 190
25.09.2010, 12:12     Вращение фигуры #1
Как можно сделать вращение фигуры??
Например, дан треугольник (имеется в виду графический режим в borland c++ 3.1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.09.2010, 12:12     Вращение фигуры
Посмотрите здесь:

C++ Вводить название фигуры, выводить формулу для вычисления площади этой фигуры
C++ вращение отрезка.
C++ Вращение отрезка
C++ Вращение куба
C++ вращение фигуры
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
25.09.2010, 12:20     Вращение фигуры #2
довольно просто
надо над каждой вершиной сделать матричное преобразование
http://www.cyberforum.ru/cgi-bin/latex.cgi?\begin{pmatrix}<br />
x'\\ <br />
y'<br />
\end{pmatrix} = \begin{pmatrix}<br />
x\\ <br />
y<br />
\end{pmatrix} \begin{pmatrix}<br />
cos\alpha  & -sin\alpha \\ <br />
sin\alpha & cos\alpha<br />
\end{pmatrix}
a91
 Аватар для a91
4 / 4 / 0
Регистрация: 03.04.2009
Сообщений: 190
25.09.2010, 15:50  [ТС]     Вращение фигуры #3
т.е. для координаты х=xcosa-ysina,
а для y=xsina+xcosa

?
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
25.09.2010, 15:52     Вращение фигуры #4
да, так для каждой точки фигуры, однако один момент - поворот идет относительно (0,0), если нужно относительно центра фигуры, то нужно пересчитать в относительные координаты (где 0,0 центр фигуры) и там уже вращать
a91
 Аватар для a91
4 / 4 / 0
Регистрация: 03.04.2009
Сообщений: 190
28.09.2010, 13:39  [ТС]     Вращение фигуры #5
А как пересчитать в относительные координаты??
Adler
 Аватар для Adler
78 / 78 / 3
Регистрация: 07.05.2009
Сообщений: 316
28.09.2010, 14:21     Вращение фигуры #6
Цитата Сообщение от a91 Посмотреть сообщение
А как пересчитать в относительные координаты??
Вычесть из координат вершин фигуры координаты её центра.
a91
 Аватар для a91
4 / 4 / 0
Регистрация: 03.04.2009
Сообщений: 190
28.09.2010, 14:42  [ТС]     Вращение фигуры #7
т.е. для х это будет так - х=(x-x0)cosa-(y-y0)sina?
где x0,y0 - координаты центра

вот так не работает ((
Adler
 Аватар для Adler
78 / 78 / 3
Регистрация: 07.05.2009
Сообщений: 316
28.09.2010, 14:55     Вращение фигуры #8
out_х=(x-x0)cosa-(y-y0)sina
out_x и x не одно и тоже. x,y,x0,y0 - это входные данные.

и да, в итоге должно быть так:
out_х=x0+((x-x0)*cos(a)-(y-y0)*sin(a));
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
28.09.2010, 15:34     Вращение фигуры #9
a91, выполните в три шага
1. Перенесите координаты http://www.cyberforum.ru/cgi-bin/latex.cgi?\begin{pmatrix}<br />
x'<br />
\\ <br />
y'<br />
\end{pmatrix} = \begin{pmatrix}<br />
x<br />
\\ <br />
y<br />
\end{pmatrix} - \begin{pmatrix}<br />
x_c<br />
\\ <br />
y_c<br />
\end{pmatrix}

тоже самое достигается домножением на матрицу перехода
2. сделайте поворт
3. верните обратно

а потом уже соединяйте в одно действие
Можно все действия записать матрицами, их перемножить и в одно действие использовать
смотрите матчасть http://ru.wikipedia.org/wiki/Матрица_перехода
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.09.2010, 15:52     Вращение фигуры
Еще ссылки по теме:

вращение фигуры C++
C++ вращение фигуры
C++ Программа вычисления местонахождения точки относительно фигуры (лежит ли точка внутри, на контуре или вне фигуры)

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
a91
 Аватар для a91
4 / 4 / 0
Регистрация: 03.04.2009
Сообщений: 190
30.09.2010, 15:52  [ТС]     Вращение фигуры #10
Да, теперь все работает!!
Я тогда забывал после преобразования координат конкретной фигуры прибавлять координаты ее центра
Yandex
Объявления
30.09.2010, 15:52     Вращение фигуры
Ответ Создать тему
Опции темы

Текущее время: 18:05. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru