![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Lulikk |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 24.11.2010 Репутация: нет Всего: нет |
Привет!
У меня есть проект, в котором несколько файлов. В файлах описывается различные геометрические фигуры с разными параметрами. Сначала надо было организовать просто движение любого из классов;
А теперь надо сделать движение по кругу. Причём класс ColorRect должен двигатся по классу Circle. с этим возникли большие проблемы.
причём переменные x0 и y0 надо брать из класса Colorrect, но не получаеться сделать указатель. Это сообщение отредактировал(а) Lulikk - 24.11.2010, 02:34 |
||||
|
|||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 60 Всего: 223 |
У вас есть 2 сущности - фигуры, которые можно двигать и процесс, управляющий движением. Напрашивается 2 базовых класса (Figure, MoveCtrl) и реализация того же Circle, как наследника их обоих
|
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
имхо, movectrl не наследник, а конечный класс на вход котрому попадают фигура и путь.. по таймеру он запрашивает точку смещения у пути и туда перемещает фигуру.. удобнее будет, если фигура можгла бы возвращать путь... Добавлено через 2 минуты и 32 секунды поемотрел на код.. думаю я своим постом только запутал.. Добавлено через 6 минут и 7 секунд сделайте функцию расчета координаты по долевому значению, если применительно к окружности то по углу.. после в цикле изменяйте угол и смещайте фигуру в полученную точку.. Это сообщение отредактировал(а) mes - 24.11.2010, 19:18 |
|||
|
||||
| Lulikk |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 24.11.2010 Репутация: нет Всего: нет |
а есть какой нибудь пример???
\не совсем понимаю как это реализовать( а как написать функцию расчета координаты по долевому значению? есть формула? Это сообщение отредактировал(а) Lulikk - 24.11.2010, 20:24 |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
||||
|
||||
| xvr |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 60 Всего: 223 |
Вот собственно и возвращает (в виде наследования от movectrl)
Методы: virtual void Figure::move_to(int x, int y); - Перемещает фигуру в точку x,y virtual void MoveCtrl::move_setup(int total_steps, Figure*); - Инициализирует перемещение. Задает количество шагов, за которое управляемая фигура должна осуществить полный оборот по пути. И задает фигуру, которая будет двигаться virtual void MoveCtrl::move(); - Осуществляет 1 шаг управляемой фигуры. |
||||
|
|||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
по мне как то не по себе, что контроллер движения ограничен определением конкретной фигуры.. но для простоты можно и так |
|||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 60 Всего: 223 |
Можно конечно сделать Path (описатель пути), и класс (не базовый, а конкретный), который будет перемещать фигуру по Path. Но в данной задаче это явный перебор |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
это да.. а вот как часто делать передвижения и с каким интервалом это совсем не фигурные знания.. а также двигать фигуру хватаясь за центр или другую точку или меняя точку прихвата на каждой итерации ? Это сообщение отредактировал(а) mes - 24.11.2010, 23:55 |
|||
|
||||
| baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 32 Всего: 101 |
необходимо представить функцию, описывающую фигуру, в параметрическом виде например для окружности x=x0+R*cos(t*2*pi) y=y0+R*sin(t*2*pi) x0, y0 - координаты центра t принимает значения от 0 до 1 Напрашивается функция - член класса GeomFigure, которая возвращает координаты x,y по параметру t ее можно использовать и в функции рисования фигуры, и для определения траектории при этом производные классы - Circle, Rect могут вообще не содержать функцию рисования (пользоваться базовой) Это сообщение отредактировал(а) baldina - 25.11.2010, 10:16 |
|||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 60 Всего: 223 |
Если нужна такая функциональность, тогда да (как я уже писал - Path + отдельный контролер перемещения). Но у ТС даже та функциональность, что я описал ранее, не требовалась |
|||
|
||||
| Lulikk |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 24.11.2010 Репутация: нет Всего: нет |
я когда цикл пишу, видимо с ошибкой, происходит движение по кругу, но не заданного радиуса, а зависит от того,насколько я делю окружность
|
|||
|
||||
| baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 32 Всего: 101 |
||||
|
||||
| Lulikk |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 24.11.2010 Репутация: нет Всего: нет |
просто много вариантов было. забыла это срочку заккоментить.так всё верно
|
|||
|
||||
| baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 32 Всего: 101 |
что-то вроде:
писал тут, не проверял Это сообщение отредактировал(а) baldina - 26.11.2010, 10:50 |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |