Все переменные я обозначу буквами :
B : bearing
a : elevation
P : power
Px: power, ось х, горизонтальная скорость
Py: power, ось у, вертикальная скорость
Названия граф оставил английскими для тех, кто не умеет в английский.
В телесайнсе ось х и ось у полностью независимы, в отличии от GPS.
х - абсолютная длина, а у это высота, на которую “поднимается” объект. Мы знаем, что идеальный угол броска какого-либо снаряда равен 45 градусам. Угол броска можно считать графу Elevation. От нее, вместе с графой Power, зависит то, как далеко/откуда телепортируется объект.
Зная значение Elevation, мы можем найти Px и Py. Внизу нарисован “правильный” треугольник c гипотенузой Р, угол противоположен стороне Ру и смежен Рх:
/|
/ |
P/ |
/ |Py
/ |
/ |
/a___|
Px
Форум пишет как-то криво, получилось так. Представьте, что все это ровно.
Увидев это, мы можем найти отношение между этими переменными(наши любимые косинусы/синусы):
Px = Pcos(a)
Py = Psin(a)
Но это все начальные законы баллистики. Я не написал о том, что телепорт как пушка, а предмет как снаряд, скорость полета снаряда и дальность зависит от законов баллистики.
Баллистическая траектория у телесайнса будет выглядеть примерно так:
Средняя точка
*
* *
* *
* *
* *
* *
Точка запуска Точка приземления
* *
Точка запуска - начало телепортации, точка прилета - завершенная телепортация.
Средняя точка показывает время, сколько времени требуется для “взлета” объекта. Телепортация затрачивает время, да.
Время телепортации полностью зависит от времени, требуемого объекту “вылететь” и “прилететь” из места запуска в место приземления. Теперь, “гравитация” равна 10 и телепорту сначала требуется “кинуть” объект и “приземлить” его, что удваивает время. Всмысле, требуется одно и тоже время для взлета и для приземления объекта.
t: время
t = 2*Py/10
= 1/5 * Py
Также, пройденная горизонтальная дистанция это отдача х, скорость объекта остается той же самой весь путь:
d: дистанция
d = t * Px = 1/5 * Px * Py
= 1/5 * Pcos(a) * Psin(a)
= 1/5 * P^2*sin(a)cos(a)
d = 1/10 * P^2*2sin(a)cos(a)
= 1/10 * P^2*sin(2*a)
Формула “двух углов” радикально показывает, что нам нужно знать. Это работает на интуитивной основе, когда значение Elevation от 1 до 90. При значении Elevation 90 мы кидаем предмет ровно вверх и он возвращается на ту же точку: sin(290)=sin(180)=0.
Еще это работает с градусом 45 - sin(245)=sin(90)=1, все это значит то, что это максимальное, что может выдать функция синуса.
Теперь мы знаем, как найти дистанцию. Сейчас нам нужно применить это к телепорту. Для телепорта нам нужна магнитуда и дистанция. Магнитуда определяется числом Elevation и числом Power, что дает нам как далеко телепортируется объект. А Bearing находим с помощью удаленных координат, которые мы должны знать.
Вот отношение:
x : x дистанция от телепорта (может быть отрицательным)
y : y дистанция от телепорта (может быть отрицательным)
B : bearing (может быть отрицательным)
B = arctan(x/y)
0град. ^ x
|--------/
| /
| /
| /
y | /d
| /
| /
|B/
|/ 90град.
<-------------------------------------------------------------------->
270град. l
|
|
|
|
|
|
|
|
|
v 180град
Запомним квадрант, когда тангенс становится противоположным. С тех пор, как дистанция уже не может быть отрицательной, нужно узнать правильный Bearing. Если квадрант угла неправильный, то нужно просто прибавить или вычесть 180.
Но у нас также есть и погрешность. Погрешность быстро вычислить нереально, нам для точной погрешности потребуется пара тестов и много вычислений.
Вот примерно так. Понять трудно, но полезно. У меня есть код для калькулятора бея, спер с гитхуба. Кому нужно, скину(есть еще на тг). Впрочем, если не трудно, оцените старания в плане поиска и писанины плюсом.