Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > Blitz3D > Полезные функции

Полезные функции Выкладываем полезные функции, чтоб не изобретать велосипед заново...

Ответ
 
Опции темы
Старый 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)
Старый 19.04.2007, 00:59   #2
alcoSHoLiK
Дэвелопер
 
Регистрация: 17.01.2006
Сообщений: 1,512
Написано 78 полезных сообщений
(для 110 пользователей)
Re: 2D - Angle, Nxz, Distance

cos(a - 90) = -sin(a)
sin(a - 90) = cos(a)

Уточни, пожалуйста: какие координаты относительно какого угла?
(Offline)
 
Ответить с цитированием
Старый 19.04.2007, 01:12   #3
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Re: 2D - Angle, Nxz, Distance

Не совсем понял вопроса, но насчёт:
cos(a - 90) = -sin(a)
sin(a - 90) = cos(a)
Спасибо!

AtoNX - Узнаём координату X из угла.
AtoNY - Узнаём координату Y из угла.

Угол будет вычислятся по стандарту из двух линий: вертикальная вверх, от точки угла, и указанная координата.
К примеру если угол 45 градусов, то AtoNX(угла)=0.707... ; AtoNY(угла)=-0.707...
(Offline)
 
Ответить с цитированием
Старый 19.04.2007, 01:41   #4
alcoSHoLiK
Дэвелопер
 
Регистрация: 17.01.2006
Сообщений: 1,512
Написано 78 полезных сообщений
(для 110 пользователей)
Re: 2D - Angle, Nxz, Distance

Ну это, имхо, просто вычисление синуса и косинуса угла. Функция оторвана от контекста.
Я так понял, это переход от сферических координат в прямоугольные. Тогда имеет смысл добавить значение "ро" в список входных параметров, чтобы не приходилось на него умножать в самом коде.
(Offline)
 
Ответить с цитированием
Старый 19.04.2007, 03:16   #5
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Re: 2D - Angle, Nxz, Distance

Ух, не считайте меня столь образованным, я конечно понял написанное, но подобно сообщение могу и не понять .
Это имхо, но дело уже каждого, кто будет использовать эти функции, и если ему нужно то он будет их изменять как ему угодно.
Ну это, имхо, просто вычисление синуса и косинуса угла. Функция оторвана от контекста.
Да, я и не пытался изобрести велосипед, и для многих порой тоже сперва подобные функции кажутся "далёкими", пока они не найдут раздел "Math" и не покопаются в нём получше. Я лишь выложил эти функции, не считая что я изобрёл колесо или "открыл омерику", просто мне нужно были эти функции, не имея доступа в интернет, я их сидел и пытался придумать, и у меня вышло,и я решил поделиться с другими, как у меня это вышло, счёл что они могут быть потребны и другим.
alcoSHoLiK - вижу что вы образованный человек. А я вот необразованный, не имею никаких оброзований, кроме минимального, поэтому для меня подобное может даётся и просто, но по началу время потребляет - что есть усилия, и результат.

(Offline)
 
Ответить с цитированием
Старый 19.04.2007, 08:51   #6
Platon
Знающий
 
Регистрация: 04.08.2006
Адрес: Россия
Сообщений: 297
Написано 39 полезных сообщений
(для 70 пользователей)
Re: 2D - Angle, Nxz, Distance

Сообщение от MoKa
Function Distance2D#(x1#,y1#,x2#,y2#)
Local nx#=Abs(x1-x2) ;Длина горизонтального Катета
Local ny#=Abs(y1-y2) ;Длина Вертикального Катета
Return Sqr((nx*nx)+(ny*ny)) ;Длина Гипотенузы
End Function
Модуль здесь не нужен (Abs)

Сообщение от MoKa
Function NVtoA#(sx#,sy#,tx#,ty#)
Return (360-(ATan2((tx-sx),(ty-sy))+180))
End Function
А здесь надо упростить
Return 180 - ATan2((tx-sx),(ty-sy))
(Offline)
 
Ответить с цитированием
Старый 01.05.2007, 00:39   #7
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Re: 2D - Angle, Nxz, Distance

Сделал все поправки в первом посте, которые заметил Cyan.
(Offline)
 
Ответить с цитированием
Старый 01.05.2007, 00:49   #8
alcoSHoLiK
Дэвелопер
 
Регистрация: 17.01.2006
Сообщений: 1,512
Написано 78 полезных сообщений
(для 110 пользователей)
Re: 2D - Angle, Nxz, Distance

А мои поправки?)
(Offline)
 
Ответить с цитированием
Старый 01.05.2007, 00:52   #9
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Re: 2D - Angle, Nxz, Distance

Всё сделал, извеняюсь, просто что-топоспешил как-то
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 17:34.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com