Вращение юнита в 3D

Добавлен , опубликован
Алгоритмы, Наработки и Способности
Способ реализации:
Jass
Тип:
Алгоритм
Вращение юнита в 3D.
A,B,C - углы на которые будет поворачиваться юнит в пространстве вокруг точки X1, Y1, Z1
A, B, C, X1, Y1, Z1 - глобалки.
function Actions2 takes nothing returns nothing
local unit u=GetEnumUnit()
local real a1
local real b1
local real a2
local real b2
local real a3
local real b3
set X2=GetUnitX(u)
set Y2=GetUnitY(u)
set Z2=GetUnitFlyHeight(u)

set d=SquareRoot((X2-X1)*(X2-X1)+(Y2-Y1)*(Y2-Y1)+(Z2-Z1)*(Z2-Z1))

set a1=Atan2BJ(Y2-Y1,X2-X1)+A //roll
set b1=Atan2BJ(SquareRoot((X2-X1)*(X2-X1)+(Y2-Y1)*(Y2-Y1)),Z2-Z1)

set X2=X1+d*SinBJ(b1)*CosBJ(a1)
set Y2=Y1+d*SinBJ(b1)*SinBJ(a1)
set Z2=Z1+d*CosBJ(b1)

set a2=Atan2BJ(Y2-Y1,Z2-Z1)+B //pitch
set b2=Atan2BJ(SquareRoot((Z2-Z1)*(Z2-Z1)+(Y2-Y1)*(Y2-Y1)),X2-X1)

set X2=X1+d*CosBJ(b2)
set Y2=Y1+d*SinBJ(b2)*SinBJ(a2)
set Z2=Z1+d*SinBJ(b2)*CosBJ(a2)

set a3=Atan2BJ(Z2-Z1,X2-X1)+C //yaw
set b3=Atan2BJ(SquareRoot((X2-X1)*(X2-X1)+(Z2-Z1)*(Z2-Z1)),Y2-Y1)

set X2=X1+d*SinBJ(b3)*CosBJ(a3)
set Y2=Y1+d*CosBJ(b3)
set Z2=Z1+d*SinBJ(b3)*SinBJ(a3)

call SetUnitX(u,X2)
call SetUnitY(u,Y2)
call SetUnitFlyHeight(u,Z2,0.00)
set u=null
endfunction
тема где все это разбиралось с примером (вторая страница) :