Способ реализации:
cJass
Тип:
Алгоритм
Вращение юнита в 3D.
A,B,C - углы на которые будет поворачиваться юнит в пространстве вокруг точки X1, Y1, Z1
void RotateUnit(unit u, float X1, float Y1, float Z1, float A, float B, float C){
     float a1, b1, a2, b2, a3, b3, X2, Y2, Z2
     
     X2 = GetUnitX(u)  
     Y2 = GetUnitY(u)
     Z2 = GetUnitFlyHeight(u)
     
     d = SquareRoot((X2 - X1) * (X2 - X1) + (Y2 - Y1) * (Y2 - Y1) + (Z2 - Z1) * (Z2 - Z1))
     
     a1 = Atan2(Y2 - Y1, X2 - X1) + A
     b1 = Atan2(SquareRoot((X2 - X1) * (X2 - X1) + (Y2 - Y1) * (Y2 - Y1)), Z2 - Z1)
     
     X2 = X1 + d * Sin (b1) * Cos(a1)
     Y2 = Y1 + d * Sin(b1) * Sin(a1)
     Z2 = Z1 + d * Cos(b1)
     
     a2 = Atan2(Y2 - Y1, Z2 - Z1) + B
     b2 = Atan2(SquareRoot((Z2 - Z1) * (Z2 - Z1) + (Y2 - Y1) * (Y2 - Y1)), X2 - X1)
     
     X2 = X1 + d * Cos(b2)
     Y2 = Y1 + d * Sin(b2) * Sin(a2)
     Z2 = Z1 + d * Sin(b2) * Cos(a2)
     
     a3 = Atan2(Z2 - Z1, X2 - X1) + C
     b3 = Atan2(SquareRoot((X2 - X1) * (X2 - X1) + (Z2 - Z1) * (Z2 - Z1)), Y2 - Y1)
     
     X2 = X1 + d * Sin(b3) * Cos(a3)
     Y2 = Y1 + d * Cos(b3)
     Z2 = Z1 + d * Sin(b3) * Sin(a3)
     
     SetUnitX(u, X2)
     SetUnitY(u, Y2)
     SetUnitFlyHeight(u, Z2, 0.0)
}
0
Голосов: 0
vlad_C0M - 10 years ago
Edited by
0
Голосов: 0
Пример применения...??? И как это в 3д?? Относительно чего? Т.е. юнита можно вращать? Телепатия применения прям..
2
Голосов: 2
alexprey - 10 years ago
2
Голосов: 2
vlad_C0M, относительно указанной точки
0
Голосов: 0
Doc - 10 years ago
0
Голосов: 0
Это не я выкладывал и добавлял в библиотеку функций не я, оно мне нужно было для своих целей а кто-то решил добавить видимо.
Энивей, это очень плохой пример, сейчас я бы сделал через матрицы.
0
Голосов: 0
vlad_C0M - 10 years ago
0
Голосов: 0
... нет ничего лучше в данном случае непосредственно point... (впрочем ладно нашел менее телепатийный вариант)
Хотя тут дело не в point... и его правильного перемещения
0
Голосов: 0
Doc - 10 years ago
0
Голосов: 0
vlad_C0M, кстати пример применения - xgm.ru/forum/showthread.php?t=44667
0
Голосов: 0
alexprey - 10 years ago
0
Голосов: 0
Doc, да смысл через матрицы, при раскрытии то же получится
0
Голосов: 0
vlad_C0M - 10 years ago
0
Голосов: 0
Нашел ...описание ТОГО ЧТО ИМЕЛОСЬ ВВИДУ : xgm.ru/p/wc3/math_mov
0
Голосов: 0
Doc - 10 years ago
0
Голосов: 0
alexprey, нет же. А еще этот код кривой и плохо учитывает local coord space модели.
vlad_C0M, да, типа того.
To leave a comment please sign in to the site.