|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
21.09.2009, 20:59 | #1 |
Пользователь
Регистрация: 26.05.2009
Сообщений: 12
|
как заставить линию вращатся вокруг её центра?
Есть линия.Как заставить ее вращаться вокруг своей оси(центра линии) при нажатии любой клавиши?Заранее спасибо.(если можно то пример кода хотя бы в 1сторону чтоб вращалось, дальше сам доделаю)еще раз спасибо
|
21.09.2009, 23:00 | #2 |
В тени
Старожил
Регистрация: 19.12.2008
Сообщений: 5,788
|
При таком объеме исходной информации вам вряд ли можно ответить что-то конкретное. Какая среда? Как рисуете линию?
Чтобы заставить линию вращаться, нужно через определенный интервал перерисовывать ее (затирая старую). Тригонометрия в помощь. Подозреваю, что пример на паскале вас вряд ли устроит.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем. ___________________________________ ___________________________________ _______ [=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль] |
21.09.2009, 23:12 | #3 |
Eclipse Foundation
Старожил
Регистрация: 19.09.2007
Сообщений: 2,604
|
Just use Affine Transformation!
Вбиваем в гуглоту "Афинные преобразования Вики" и наслаждаемся. |
23.09.2009, 08:43 | #4 |
Пользователь
Регистрация: 27.07.2009
Сообщений: 27
|
Самый лучший способ это использование матриц. Пример матриц можно найти в инете или в DirectX SDK. В DirectX SDK используются матрицы для 3D, тебе необходимо переделать их для 2D и все.
Вот ссылка на статью в википедии: http://ru.wikipedia.org/wiki/Матрица_поворота |
23.09.2009, 11:43 | #5 |
Старожил
Регистрация: 06.08.2009
Сообщений: 2,992
|
Какие к черту матрицы? Какие афинные преобразования? Обычная тригонометрия.
Функция рисования будет выглядеть примерно так: Line (x+l*cos(a), y+l*sin(a), x-l*cos(a), y-l*sin(a)); где x, y - координаты цетра, l - пол-длины отрезка, a - угол поворота (NB: в радианах). Чтобы линия двигалась, нужно в цикле или в таймере прибавлять a, скажем, на 0.01 (при условии что клавиша нажата). |
23.09.2009, 14:01 | #6 |
Пользователь
Регистрация: 27.07.2009
Сообщений: 27
|
Предлагаю способ лучше:
Вот тебе функция для вращения точки с координатами (x, y) вокруг оси Z. VOID RotationZ(float* x, float* y, float ang) { float tx=(*x)*cos(ang)-(*y)*sin(ang); float ty=(*x)*sin(ang)+(*y)*cos(ang); *x=tx; *y=ty; } Где "x" и "y" координаты точки, относительно центра вращения; ang - угол на который необходимо повернуть, положительное значение вращает в одну сторону, отрицательное в другую. Функция проверена и работает. Последний раз редактировалось HWork; 23.09.2009 в 14:07. |
24.09.2009, 04:42 | #7 |
Студент, не
Старожил
Регистрация: 29.01.2009
Сообщений: 2,067
|
I am the First of Cyber Evolution...
I am the First to Program your Future... |
Опции темы | Поиск в этой теме |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Как заставить браузер рисовать рамку вокруг пустой ячейки? | Stilet | HTML и CSS | 7 | 11.09.2012 13:36 |
Как нарисовать линию по пикселям | DenLab | Общие вопросы Delphi | 4 | 03.12.2008 09:34 |
Как же нарисовать линию на форме? (Вопрос новичка) | grey | Помощь студентам | 11 | 24.11.2008 10:31 |
хочу стереть линию с канвы.КАК? | harmager | Общие вопросы Delphi | 1 | 24.11.2008 10:28 |