|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
26.11.2022, 00:30 | #1 |
Пользователь
Регистрация: 25.11.2022
Сообщений: 16
|
Перемещение шарика по траектории
C# windows forms
Привет ребят нужно срочно задание сделать...У меня есть готовый ехе файл,но как кодом сообразить вообще не пойму(вклал файлы). Мб кто-то умеет такое? Само задание состоит в том,чтобы сделать проект, в котором происходит перемещение "шарика" по траектории заданной функцией y=sinx (окрашенного круга), при нажатии по кнопке.Окружность должна двигаться по компоненту Panel вправо и при достижении его правая граница должна появляться у левой границы и снова двигаться вправо. |
26.11.2022, 01:26 | #2 |
Участник клуба
Регистрация: 17.04.2022
Сообщений: 1,833
|
1) Выбираем ширину синусоиды в пикселях. рис. 1
Формула для перевода координаты X в углы функции sin radAngle = 2 * pi * x / wid radAngle передается в функцию sin для получения позиции по y (см. пункт 2) pi константа x координата в окне по оси x wid выбранный размер синусоиды (см. рис 1) 2) Выбираем высоту синусоиды в пикселях. рис. 2 Формула у вас задана: y = hei * sin(radAngle) y координата в окне по оси y hei выбранный размер синусоиды (см. рис 2) sin тригонометрическая функция синуса radAngle вычисляется в пункте 1 3) Выбираем размеры шарика (диаметр). рис. 3 Зная диаметр шарика и координаты (x, y = hei * sin(2 * pi * x / wid)), можно вычислить точки для рисования Round = { left = x - dia / 2, top = y - dia / 2, right = x + dia / 2, bottom = y + dia / 2 }, где dia выбранный размер шарика, а Round это область рисования шарика по координатам на синусоиде (x, y) 4) Переносим эти вычисления на ось времени (выбираем скорость равномерного движения). Координата x изменяется с течением времени следующим образом: x = (x0 + v * t) % windowWidth x0 это начальная позиция шарика на синусоиде (до применения пункта 3) v это количество пикселей, которое проходит шарик за единицу времени t это время прошедшее с начала анимации windowWidth это ширина всего окна и нужна она для того, чтобы шарик повторно проходил по синусоиде с левого края окна по достижении правого края. 5) Рисуем синусоиду. Это проще всего сделать в цикле перечисления пикселей по координате x и вычисляя по формуле из пункта 1 координат y и далее по координатам (x, y) рисуется точка выбранным цветом. Шарик же рисуется после синусоиды, чтобы затереть её часть, а для рисования используем координаты из структуры Round вычисленные в пункте 4. 6) Создаем анимацию перемещения шарика. Для этого создаем переменную значение, в которой будем приращивать на 1 каждый элементарный промежуток времени (это и будет переменной t из пункта 4). После этого достаточно выполнить перерисовку всех элементов окна. 7) Да вот вроде бы и все. Удачи в реализации. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Перемещение шарика по траектории заданной функцией при нажатии по кнопке | TrueAlex | Windows Forms | 0 | 25.11.2022 21:36 |
Перемещение шарика по траектории заданной функцией при нажатии по кнопке | TrueAlex | Помощь студентам | 0 | 25.11.2022 00:20 |
Canvas.Движение шарика по заданной нарисованной траектории | yurotchka | Мультимедиа в Delphi | 2 | 22.06.2013 20:35 |
Перемещение Image по заданной траектории. | werrey | Общие вопросы Delphi | 3 | 01.06.2011 16:06 |
Перемещение рисунка по траектории | Noob333 | Помощь студентам | 1 | 28.04.2009 10:42 |