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

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

Ответ
 
Doc

offline
Опыт: 63,163
Активность:
polarz
Сабж, нужен аналог для рассчета по z.
polarx(c, dist, angle) = c + dist * Cos(angle)
polary(c, dist, angle) = c + dist * Sin(angle)
Да я нуб, но никогда такое не юзал.
Старый 06.01.2011, 23:25
XOR

offline
Опыт: 38,159
Активность:
Старый 06.01.2011, 23:53
Doc

offline
Опыт: 63,163
Активность:
X, спасибо. Один вопрос: как рассчитать угол t? То есть мне нужно прибавить к текущему t угол, на который нужно повернуть.
Старый 07.01.2011, 00:07
ScorpioT1000
Работаем
offline
Опыт: отключен
angle+t ?
Старый 07.01.2011, 00:12
Doc

offline
Опыт: 63,163
Активность:
ScorpioT1000, не, вот смотри во что я переделал
((код jass
polarx(c, dist, a, t) = c + dist * Cos(bj_DEGTORAD * a) * Sin(bj_DEGTORAD * t)
polary(c, dist, a, t) = c + dist * Sin(bj_DEGTORAD * a) * Sin(bj_DEGTORAD * t)
polarz(c, dist, a, t) = c + dist * Cos(bj_DEGTORAD * t)
anglecord(xA, yA, xB, yB) = (bj_RADTODEG * Atan2(yB - yA, xB - xA))
distcord(Xa, Ya, Za, Xb,Yb, Zb) = (SquareRoot((Xb - Xa) * (Xb - Xa) + (Yb - Ya) * (Yb - Ya) + (Zb - Za) * (Zb - Za)))
void StaticRotate(float a, float t){
d = distcord(.p[i].x1, .p[i].y1, .p[i].z1, .x, .y, .z)
an = anglecord(.x, .y, .p[i].x1, .p[i].y1)
tn = anglecord(.z, .y, .p[i].z1, .p[i].y1) на шару ставил, как правильно?
.p[i].x1 = polarx(.x, d, an + a, tn + 1)
.p[i].y1 = polary(.y, d, an + a, tn + 1)
.p[i].z1 = polarz(.z, d, an + a, tn + 1)
}
))
Старый 07.01.2011, 00:15
ScorpioT1000
Работаем
offline
Опыт: отключен
t это вертикальный угол, если он не важен равен пи, т.е. 1, т.е. 180 гр
Старый 07.01.2011, 00:19
Doc

offline
Опыт: 63,163
Активность:
ScorpioT1000, нет, он важен, простой поворот я итак сделал. Теперь надо с вертикальным -.-
Старый 07.01.2011, 00:24
agentex

offline
Опыт: 34,834
Активность:
там кривые формулы для сферических, правильней так:
X = Cos(yaw)*Cos(pitch)
Y = Sin(yaw)*Cos(pitch)
Z = Sin(pitch)
Сабж, нужен аналог для рассчета по z.
ну, вообще есть 3 варианта - сферические координаты, цилиндрические и векторно (если без углов). как ни странно для каждого конкретного случая нужен свой подход.
Старый 07.01.2011, 03:34
ScorpioT1000
Работаем
offline
Опыт: отключен
поворот чего ?
Старый 07.01.2011, 06:56
Doc

offline
Опыт: 63,163
Активность:
ScorpioT1000, pitch
agentex, ты мне лучше конкретно объясни, как рассчитать текущий pitch?
Старый 07.01.2011, 11:29
ScorpioT1000
Работаем
offline
Опыт: отключен
где ты его взять хочешь? у камеры? будет десинк

ScorpioT1000 добавил:
http://www.dropmocks.com/mPFFx
Старый 07.01.2011, 12:55
Doc

offline
Опыт: 63,163
Активность:
ScorpioT1000, нет, я хочу взять pitch угол между двумя точками же.
Старый 07.01.2011, 12:55
ScorpioT1000
Работаем
offline
Опыт: отключен
вот на рисунке beta это твой a, а alpha это твой t что непонятного еще может быть?
ScorpioT1000 добавил:
какая в жопу разница между какими точками, на рисунке тоже 2 точки, ну сделай векторами тогда
Старый 07.01.2011, 13:00
Doc

offline
Опыт: 63,163
Активность:
ScorpioT1000, блин, я уже нихрена не понимаю. Вот допустим конкретный пример: есть куб, описанный 8 точками. Как нам повернуть этот куб на 30 градусов по оси y(?) и одновременно повернуть на 30 по оси z? То есть тупо наклонить его.
Старый 07.01.2011, 13:05
DioD

offline
Опыт: 45,134
Активность:
если плохо с пространственным воображением, есть универсальный метод, берёшь спичечный коробок и смотришь как он ведёт себя в пространстве.
куб с жесткими гранями невозможно просто так повернуть, так как верхняя грань и нижняя пройдут различное расстояние, советую прочитать про дифференциал на автомобилях, поможет понять как происходят повороты.
Старый 07.01.2011, 13:12
ScorpioT1000
Работаем
offline
Опыт: отключен
диод тупость сказал)
Старый 07.01.2011, 13:17
agentex

offline
Опыт: 34,834
Активность:
ты мне лучше конкретно объясни, как рассчитать текущий pitch?
к примеру так
Asin((z1-z2)/расстояние между точками)
Старый 07.01.2011, 13:23
ScorpioT1000
Работаем
offline
Опыт: отключен
z - vertical
spheric -> decart(x,y,z)
x = Cos(a)*Cos(b)*distance
y = Sin(a)*Cos(b)*distance
z = Sin(b)*distance
decart -> spheric(distance,a,b)
distance = sqrt(x*x + y*y + z*z)
a = ATan2(y, x)
b = ATan2(z, SquareRoot(x*x + y*y))
Старый 07.01.2011, 13:25
agentex

offline
Опыт: 34,834
Активность:
можно и так, раньше именно так и считал даже будет быстрее наверно изза отсутсвия +z*z
Старый 07.01.2011, 13:27
ScorpioT1000
Работаем
offline
Опыт: отключен
я векторами вобще делаю ) вычитаем вектор 1 из вектора 2 получаем вектор направления
Старый 07.01.2011, 13:31
Ответ

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

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

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

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



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