Как получить скорость энтитьки лежащей на земле?
|
|
tonline_kms65
|
Дата: Среда, 01.06.2016, 04:07:00 | Сообщение # 1 |
|
Сообщений: 215
Репутация: 3 [ +/- ]
|
|
Всем доброго времени. У меня возник такой странный вопрос. Мне нужно получить скорость энтитьки. Энтитька лежит на земле, т.е. по факту её Float:скорость[3] = 0.000. По всем 3 координатам её скорость = 0. Каким способом можно получить её скорость? Сколько не пытаюсь - не могу сообразить.
|
|
| |
TEIN
|
Дата: Среда, 01.06.2016, 07:10:05 | Сообщение # 2 |
|
Сообщений: 563
Репутация: 78 [ +/- ]
|
|
ну, скорость = путь / время, а вообще, у тебя энтити на земле лежит, какая у нее скорость должна быть ?
|
|
| |
tonline_kms65
|
Дата: Среда, 01.06.2016, 08:32:58 | Сообщение # 3 |
|
Сообщений: 215
Репутация: 3 [ +/- ]
|
|
Цитата TEIN ( ) ну, скорость = путь / время, а вообще, у тебя энтити на земле лежит, какая у нее скорость должна быть ?
Смешно. Дальше некуда. Ты сам то хоть раз пробовал определять скорость лежащего на земле пропа? Попробуй. Это я вижу что у неё скорость = 0, а как это программе объяснить? Ей по барабану.
Какой может быть путь если она лежит на земле? И так же время. И кстати так как это проп_физик то все-равно есть небольшие движения (но это можно проигнорировать).
Добавлено (01.06.2016, 08:32:58) --------------------------------------------- Вот так пробовал по формуле sqrt(x2 + y2 + z2)
decl Float:pos[3]; pos[0] = pos[0]*pos[0]; pos[1] = pos[1]*pos[1]; pos[2] = pos[2]*pos[2];
new Float:speed = SquareRoot(pos[0] + pos[1] + pos[2]);
Показывает speed >0 и всё.
Сообщение отредактировал tonline_kms65 - Среда, 01.06.2016, 08:35:47 |
|
| |
TEIN
|
Дата: Среда, 01.06.2016, 09:44:40 | Сообщение # 4 |
|
Сообщений: 563
Репутация: 78 [ +/- ]
|
|
с чего взял, что по формуле считаешь именно скорость?
на счет: какой может быть путь и т.д., корень из суммы квадратов разности координат будет давать ноль (если координаты не меняются, что логично, в принципе) ((new[0]-old[0])^2 + (new[1]-old[1])^2 + (new[2]-old[2])^2)^(1/2) = 0, это расстояние
по твоей же формуле получается, что прошлые позиции были в (0,0,0), потому то и > 0 однозначно
pos[0] = pos[0]*pos[0]; тоже самое, что (0-pos[0])^2 и т.д., где мы на 0 может забить, он не играет роли
это я к тому, что ты неправильно считаешь скорость
Сообщение отредактировал TEIN - Среда, 01.06.2016, 09:58:05 |
|
| |
tonline_kms65
|
Дата: Среда, 01.06.2016, 16:31:24 | Сообщение # 5 |
|
Сообщений: 215
Репутация: 3 [ +/- ]
|
|
Цитата TEIN ( ) с чего взял, что по формуле считаешь именно скорость?
на счет: какой может быть путь и т.д., корень из суммы квадратов разности координат будет давать ноль (если координаты не меняются, что логично, в принципе) ((new[0]-old[0])^2 + (new[1]-old[1])^2 + (new[2]-old[2])^2)^(1/2) = 0, это расстояние
по твоей же формуле получается, что прошлые позиции были в (0,0,0), потому то и > 0 однозначно pos[0] = pos[0]*pos[0]; тоже самое, что (0-pos[0])^2 и т.д., где мы на 0 может забить, он не играет роли это я к тому, что ты неправильно считаешь скорость
Я с тобой полностью согласен. Я не силен в математике. Но даже я вижу что здесь, в этой формуле не хватает координат. В том то и дело я не могу сообразить как получить старые(old) координаты.
По идее - можно например при создании дрона записать куда нибудь начальные координаты (назову их абсолютными) и уже исходя из разницы между положением текущих координат относительно абсолютных получать скорость. Это как вариант. Но меня интересует не этот вариант. вернее этот вариант не интересен. Я не могу понять как здесь, в этой ситуации, можно задать например вектор скорости. Ведь должна же быть функция получения нулевой скорости. Как объяснить программе что проп валяется на земле и не двигается. Если удастся получить нулевую скорость то получить скорость движения будет совсем легко.
Вот, например, такое определение нулевой скорости у пропа hegrenade_projectile меня очень даже устраивает.
НО. К сожалению далеко не у всех пропов есть возможность использования этого офсета m_vecVelocity именно из Prop_Send. Почти у всех есть возможность получить из Prop_Data, но там этот офсет просто не работает. Вернее не получает данные. Я уже просто начинаю думать по простецки - создам всем закомого пропа hegrenade_projectile, к нему все своё хозяйство приаттачу и все проблемы. Но это же не есть решение моей проблемы.
ВО!!! BarD Идея! А если попробовать приатачить гранату роботу, для получения текущих координат, для начальной точки лазера. Вот этот вариант я еще не пробовал. Сейчас спать - завтра попробую обязательно.
Сообщение отредактировал tonline_kms65 - Среда, 01.06.2016, 16:46:15 |
|
| |
TEIN
|
Дата: Среда, 01.06.2016, 16:43:29 | Сообщение # 6 |
|
Сообщений: 563
Репутация: 78 [ +/- ]
|
|
В том то и дело я не могу сообразить как получить старые(old) координаты.
как вариант: запускаем таймер на одну секунду 1 секунда: new координаты 2 секунда: old = new, получаем снова координаты и записываем в new и т.д. s = ((old[0]-new[0])^2 + ...)^1/2 - будет определять расстояние, тогда скорость будет являться расстоянием, ибо v = s/t, где t = 1 (таймер в 1 секунду) соответственно, если s=0, то предмет стоит на месте
это общий случай
|
|
| |
tonline_kms65
|
Дата: Среда, 01.06.2016, 16:54:48 | Сообщение # 7 |
|
Сообщений: 215
Репутация: 3 [ +/- ]
|
|
Цитата TEIN ( ) таймер в 1 секунду
А в одну секунду это критично? А если я вместо таймера буду использовать Updater (здесь OnGameFrame())?
Добавлено (01.06.2016, 16:54:48) ---------------------------------------------
Цитата TEIN ( ) 1 секунда: new координаты 2 секунда: old = new, получаем снова координаты и записываем в new и т.д.
Я тупею - а начальные old координаты тогда какие? По умолчанию = 0.00 ?
old = 0.00 1 секунда: new координаты 2 секунда: old = new, получаем снова координаты и записываем в new и т.д.
?
ЕПРСТ начальные old это же координаты которые при создании пропа.
Сообщение отредактировал tonline_kms65 - Среда, 01.06.2016, 16:56:39 |
|
| |
TEIN
|
Дата: Среда, 01.06.2016, 16:55:31 | Сообщение # 8 |
|
Сообщений: 563
Репутация: 78 [ +/- ]
|
|
OnGameFrame() слишком часто вызывается, запринти его и увидишь
|
|
| |
TEIN
|
Дата: Среда, 01.06.2016, 17:10:22 | Сообщение # 9 |
|
Сообщений: 563
Репутация: 78 [ +/- ]
|
|
если хочешь точнее, то в плане оптимизации будет лучше использовать createtimer(0.1, ...) чем ongameframe, ибо последний при 66 тике вызывается 66 раз за секунду в отличие от первого, который вызывается 10 раз за секунду, 0.1 интервала будет достаточно. тогда при подсчете скорости учитывай, что у тебя не 1 секунда интервал, а 0.1 (или сразу: v=s/t=s/0.1=10s)
|
|
| |