|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Передвижение точки по линии
Думаю сделать что-то в роде менеджера биатлона.
Есть спортсмен, у которого есть характеристики, которые отвечают за его участие в гонках (скорость, пульс, энергия). Хочу сделать, чтобы гонка проходила показательно, а не просто рассчитывался результат. Для этого хочу сделать передвижение точки (спортсмена) по линии (трассе). Точка имеет относительно характеристик свою скорость передвижения по трассе, которую можно изменять во время гонки, чтобы увеличивался пульс и тратилась энергия. Также нужно сделать, чтобы скорость изменялась на подъеме и спуске. Подскажите, что лучше использовать и как лучше сделать, если не трудно! |
#2
|
||||
|
||||
Взять Delphi поновее и посмотреть примеры использования FMX, там есть все что вы хотите и даже о чем не думали
Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
Этот пользователь сказал Спасибо Страдалецъ за это полезное сообщение: | ||
finlolo (10.03.2016)
|
#3
|
|||
|
|||
А подскажите версию, пожалуйста!
|
#4
|
||||
|
||||
Например можете спокойно скачать последнюю версию Delphi 10 Seattle. Я на ней сейчас сижу, очень даже стабильная версия. Триального периода вам хватит за глаза для написания своей программы.
Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#5
|
|||
|
|||
Цитата:
|
#6
|
||||
|
||||
Если не использовать внешние физические движки, то придется самому его писать или делать правдоподобную имитацию. Имитацию можно сделать примерно так: Создать массив точек на плоскости - трассу. Если движения будет только в одном направлении, то для каждой точки задать коэфициент сложности. Для подъема коэфициент увеличивается, для спуска уменьшается.
Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#7
|
|||
|
|||
1. Разбить трассу на точки.
2. К вычислению скорости добавить зависимость от разности между y'ом текущей точки и предыдущей (крутизна подъема/спуска). По-хорошему надо использовать аппроксимацию и находить значение производной в текущей точке. 3. По возможности для движения между точками использовать интерполяцию. |
#8
|
||||
|
||||
А теперь глупый вариант. Без физических движков и пр.
1) Точка двигается по горизонтали (ось X) с некоторой V = X пикс/кадр = const. Относительно небольшой 2) После перемещения по X смотрим, находится ли точка выше или ниже линии. Вычисляем dY между новым положением точки и линией в этой координате по X - примерное изменение высоты на "пройденном" участке. 3) X пересчитывается в соответствии с dY. 4) По оси Y точка ставится на линию согласно новой позиции X. Логично, что к примеру при подъеме в гору, новое изменение X должно быть меньше X^2/sqrt(X^2 + dY^2) (обозначим A), а при спуске с горы - больше этого значения. Поэтому можно считать новое значение на подъёме, например, как A / (1+y/x). А на спуске 2A - (A / (1+y/x)). Конечно, формулы для примера почти с потолка, как и задание. Однако я думаю, выглядеть будет плюс-минус терпимо. jmp $ ; Happy End! The Cake Is A Lie. Последний раз редактировалось Bargest, 15.03.2016 в 23:06. |