Показать сообщение отдельно
Старый 19.04.2007, 00:36   #1
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
2D - Angle, Nxz, Distance

Низнаю, наверное уже были такие функции, просто я не нашёл их, и решил изобрести сам.
Для изобретения этих функций, хватает 9 классов образования (основное).


1. Расстояние:
Описание: Функция возвращает расстояние между двух точек.
Здесь я ничего не изобретал, а только основывался теореме Пифагора (Применима только для
прямоугольного треугольника) (g1*g1)+(g2*g2)=(b*b), где: g1 и g2 - катеты, а b - гипотенуза.
Сперва мне нужно узнать длину двух катетов, и затем по формуле вычислить длину Гипотенузы.

Function Distance2D#(x1#,y1#,x2#,y2#)
Local nx#=x1-x2 ;Длина горизонтального Катета
Local ny#=y1-y2 ;Длина Вертикального Катета
Return Sqr((nx*nx)+(ny*ny)) ;Длина Гипотенузы
End Function
x1 - X Координата Источника.
y1 - Y Координата Источника.
x2 - X Координата Цели.
y2 - Y Координата Цели.


2. Угол:
Описание: Функция возвращает угол от точек источника, к точкам цели.
Здесь пришлось пробовать различные математические функции, и реализация данной функции можно
делать двумя способами: с помощью ATan (АТангенс) + ещё написать небольшие условия; с помощью ATan2,
что есть тот же АТангенс, только имеет возможность вычислять всё сам, из двух координат.
После тестов, ATan2 выдал лучший результат производительности.

Function NVtoA#(sx#,sy#,tx#,ty#)
Return (180-ATan2((tx-sx),(ty-sy)))
End Function
sx - X Координата Источника.
sy - Y Координата Источника.
tx - X Координата Цели.
ty - Y Координата Цели.


3. Угол в Координаты:
Описание: Функции вычисляют координаты: x и y, относительно угла.
Здесь ничего сложного придумывать не пришлось, правда 90 градусов от угла отнять нужно, а почему - я не вникал.

Function AtoNX#(angle#)
Return -sin(angle)
End Function
Function AtoNY#(angle#)
Return cos(angle)
End Function
angle – Угол.


Вот пример для БлицМакса, с использованием данных функций.

Автор: МоКа
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Randomize (26.06.2009)