XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Warcraft> Академия: форум для вопросов
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

Закрытая тема
 
Diaboliko
Silenced by Diaboliko
offline
Опыт: 16,108
Активность:
Угол между точками и Sin/Cos
Как расписать Atan2? То есть определить угол между точками вручную?
Пытаюсь уже второй час а точка улетает вообще не ясно куда ><
Через арксинус- вариант, но для начала что такое синус? Вариант_википедии ничего внятно не объяснил...
Старый 02.03.2011, 11:36
XOR

offline
Опыт: 38,159
Активность:
1994
Ты пошел в школу лет в 8 и еще не прошел синусы?
XimikS добавил:
какие точки? юзай координаты)
Старый 02.03.2011, 12:18
Wortecs

offline
Опыт: 3,146
Активность:
Atan2 выдет в радианах а не в градусах понимаешь?
Старый 02.03.2011, 12:43
Diaboliko
Silenced by Diaboliko
offline
Опыт: 16,108
Активность:
Wortecs:
Atan2 выдет в радианах а не в градусах понимаешь?
Пофиг, синус и косинус нормально с ней работают.
XimikS:
Ты пошел в школу лет в 8 и еще не прошел синусы?
Ну ты петросяяян
XimikS:
какие точки? юзай координаты)
Я о них и говорю... Есть 2 локации с известными координатами но как найти меж ними угол без атан2 я Хочу Знать... Ибо создается юнит повернутый лицом к этой точке.
Diaboliko добавил:
XimikS:
Давай я тебе цитату приведу?
пункт 10 сразу после примера с энжл битвин поинтс
Старый 02.03.2011, 13:00
Hanabishi
COOL STATUS
offline
Опыт: отключен
Diaboliko, можно и через обычный арктангенс, но он большую погрешность даёт, так что юзай 2 там ничего сложного
Atan2(y2-y1,x2-x1)
function A takes nothing retruns nothing
    local unit u1 = ...
    local unit u2 = ...
    call SetUnitFacing(u1,Atan2(GetUnitY(u2)-GetUnitY(u1),GetUnitX(u2)-GetUnitX(u1)),0.0)
endfunction
поворачивает юнита u1 к u2
Старый 02.03.2011, 13:14
Diaboliko
Silenced by Diaboliko
offline
Опыт: 16,108
Активность:
Так как вы не хотите переходить по ссылкам, приведу цитату...
» Вот цитата
Цитата:
Код:
Код:
local real x=GetUnitX(u)
local real y=GetUnitY(u)
local real r

local real x2=1234. // это координаты второй точки
local real y2=5678. // 

set x2=x2-x
set y2=y2-y

set r=(x2*x2+y2*y2)/50.

set x=x+x2/r
set y=y+y2/r


отлично! весь код линейный, использовано меньше памяти (все типы - скалярные), и самое главное код может быть оптимизирован дальше, к примеру если мы заранее знаем стартовые X & Y.

(взято отсюда пункт 10)


P.S. для того чтобы понять о чём я перейдите по ссылке и прочтите чутка выше инфу...
Старый 02.03.2011, 13:20
spellwerk

offline
Опыт: 4,869
Активность:
Atan2 выдет в радианах а не в градусах понимаешь?
Пофиг, синус и косинус нормально с ней работают.
facepalm
>но как найти меж ними угол без атан2 я Хочу Знать...
ну строй радиус вектор на основе этих двух точек и находи его угол
результат будет таким же, как если бы ты использовал функцию Atan2
и вообще, я не понимаю, почему сразу ее нельзя использовать -_-
Старый 02.03.2011, 13:47
Diaboliko
Silenced by Diaboliko
offline
Опыт: 16,108
Активность:
Просто капец... Вы читайте че я пишу а?
Старый 02.03.2011, 13:50
spellwerk

offline
Опыт: 4,869
Активность:
тебе ответили 4 раза -_-
ты просто изобретаешь велосипед, зачем делать все через одно место, если можно сделать все по-человечески.
в школе надо было учиться
Пытаюсь уже второй час а точка улетает вообще не ясно куда ><
советую еще потратить пару часиков на изучение школьной геометрии и чтение здешних статей, раз все такие тупые и никто не понимает о чем ты говоришь
Старый 02.03.2011, 13:59
Hanabishi
COOL STATUS
offline
Опыт: отключен
Diaboliko, ты путаешь
там дана полярная проекция, а тебе нужно узнать угол между точками - это разные вещи
Старый 02.03.2011, 14:02
Diaboliko
Silenced by Diaboliko
offline
Опыт: 16,108
Активность:
Spy_:
тебе ответили 4 раза -_-
ты просто изобретаешь велосипед, зачем делать все через одно место, если можно сделать все по-человечески.
в школе надо было учиться
Пытаюсь уже второй час а точка улетает вообще не ясно куда ><
советую еще потратить пару часиков на изучение школьной геометрии и чтение здешних статей, раз все такие тупые и никто не понимает о чем ты говоришь
В пень пойти не хочешь?) Не думаю. Так и ответь как пологается ><
Там пишется что атан2 создает вектор и по нему уже потом находит угол. Меня волнует можно ли это подсчитать без использования вектора? Чисто арифметически, без использования алгебры и геометрии
Diaboliko добавил:
Я прекрасно понимаю что там говорится о ней >< Hanabishi...
Старый 02.03.2011, 14:06
Hanabishi
COOL STATUS
offline
Опыт: отключен
Diaboliko, тогда пойми уже, что угол между точками так не считается
возможно только ещё скалярное произведение векторов, но это тоже тригонометрия
Старый 02.03.2011, 14:08
Diaboliko
Silenced by Diaboliko
offline
Опыт: 16,108
Активность:
тригонометрия тож не то)
Ладно, раз угол возвращает только атан2, тему на кол.
Старый 02.03.2011, 14:11
spellwerk

offline
Опыт: 4,869
Активность:
Atan2 нативка, и она будет работать уж побыстрее твоей функции вычисления того же самого угла
Старый 02.03.2011, 14:15
Diaboliko
Silenced by Diaboliko
offline
Опыт: 16,108
Активность:
Spy_:
Atan2 нативка, и она будет работать уж побыстрее твоей функции вычисления того же самого угла
GetUnitLoc(unit)
тоже нативка, но работа с ней медленней чем с GetUnitX(unit) & GetUnitY(unit)
Старый 02.03.2011, 14:16
alexprey
познающий Unity
offline
Опыт: 68,501
Активность:
Цитата:
Сообщение от Spy_
все такие тупые и никто не понимает

скорее наоборот
» Для неучей

Diaboliko, объясняю принцип нахождения угла между двумя точками.
Есть 2 точки A(xa,ya), B(xb,yb)
T - угоол между точками A и B (рад)

Элементарная тригонометрия.
Опускаем перпендикуляр точки B на ось oX точки A на ось oY. Получаем точку C (xb,ya) на пересечении этих перпендикуляров.
Наша задача найти угол CAB = T. tan(T) = BC/AC (из определения). BC = yb-ya, а AC = xb-xa
tan(T) = (yb-ya)/(xb-xa)
T = Arctan((yb-ya)/(xb-xa))
Так как в jass вычисление производятся с точностью до 3 знаков, то лучше использовать Arctan2, который программно считает более точно.

Векторная геометрия
Преобразуем наши точки в векторы, так чтобы они были направлены параллельно осям A - ox, B - oy. Тогда получим векторы a {xb-xa,ya} и b {xb,ya-yb}
a*b = |a|*|b|*cos(T)
a*b = (xb-xa)*xb+ya*(ya-yb)
|a| = (xb-xa)^2+ya^2
|b| = xb^2+(ya-yb)^2
Подставляем
(xb-xa)*xb+ya*(ya-yb) = ((xb-xa)^2+ya^2)*(xb^2+(ya-yb)^2)*cos(T)
Ты еще не передумал???
cos(T)=((xb-xa)*xb+ya*(ya-yb))/(((xb-xa)^2+ya^2)*(xb^2+(ya-yb)^2))
Опять же получается очень не точно с Jass. И намного медленнее


alexprey добавил:
Diaboliko, потому что идет еще и создание location и я надеюсь убедил тебя перечитать учебник геометрии за 10-11 класс
Старый 02.03.2011, 14:23
XOR

offline
Опыт: 38,159
Активность:
Diaboliko:
GetUnitLoc(unit)
тоже нативка, но работа с ней медленней чем с GetUnitX(unit) & GetUnitY(unit)
... Там локация и вообще твой велосипед будет в несколько раз медленнее обычного atan2 , который кто то запретил юзать..
Старый 02.03.2011, 14:43
Закрытая тема

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

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

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 13:04.