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

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

 
MF
Что-то вокруг не так
offline
Опыт: 26,594
Активность:
Математический подход к движению
Тема для тех кто не знает что это, будет полезно.

Что такое сферические координаты


Итак, частным случаем сферических координат являются полярные координаты (угол плюс расстояние) данные координаты позволяют очень удобно и гибко работать с перемещениями в 2d (да и не только с ними), в сферических же координатах добавляеться еще один угол, в результате мы получаем 3d аппарат.
Как это выглядит?
Картинка
Итак, там есть два угла, нижний (который фи) это известный нам угол полярных координат, а вот верхний (тета) тот самый введенный, в классике, как на картинке, это угол между направлением "вверх" и направлением к точке (чьи координаты мы хотим представить), так же существует и система координат, где угол береться между направлением и проекцией на плоскость.
Формулы перехода
Для полярных координат это:
Код:
set x = p * Cos( a )
set y = p * Sin( a )

Для сферических все не намного сложнее:
Код:
set x = p * Cos( a ) * Sin( t )
set y = p * Sin( a ) * Sin( t )
set z = p * Cos( t )

t - новый угол, эти формулы для классики, для второй системы координат достаточно поменять синус и косинус введенного угла местами.
Для чего это нужно
Ну спектр применения довольно широк, например когда нужно, чтоб огненный шарик летел не просто в точку с координатами X и Y, но и учитывалась высоты этой точки. В общем там где высота иммеет значение.
Еще одна формула
Просто для общего развития (тех кто не знает само собой ).
Формула рсстояния d 3d
Код:
set p = SquareRoot( dx * dx + dy * dy + dz * dz)

Где dx, dy, dz - соответствующая разница координат.

Циллиндрические координаты


Но не всегда 3d удобно представлять в виде сферы. Пример такого неудобства всевозможные спирали вокруг юнита и так далее. Интуитивно многие приходили к этой системе. И она несколько проще для понимания.
Как это выглядит?

разберемся чем это отличаеться от сферических координат? В основе все та же полярка, а вот 3я координата вводиться просто и без заумностей, как высота.
Формулы перехода
Формулы тут тоже гораздо проще:
Код:
set x = p * Cos( a )
set y = p * Sin( a )
set z = h

Тут угол а - угол полярных координат, h - высота точки, p - длинна проэкции на плоскость.
Для чего это нужно
С помощью циллиндрических координат решаються те же задачи что и с помощью сферических, тут стоит вопрос удобства. Например реализация движения по поверхности сферы это удобнее в сферических, а по поверхности цилиндра это в циллиндрических.

Что такое повороты и с чем их едят[/B]


Иногда не очень удобно использовать ту или иную систему координат "как есть".
Например задача: построить окружность в плоскости отличной от горизонтальной.
На первый взгляд решение стоит копать в сторону сферических координат... Но нахождение параметрического уравнения такой окружности в сферических координатах не такая уж простая задача, гораздо удобнее и быстрее (как в человеческом понимании, так и в машинном) работать с поворотами.
Что нам нужно?
Для начала разберемся, что же задает плоскость в пространстве? Для наших целей подойдет 2 угла (a и b) и точка t.
t - точка через которую проходит горизонтальная плоскость (которую и будем поварачивать)
a - угол поворота вокруг оси, параллельной X, проходящей через t
b - угол поворота вокруг оси, параллельной Z, проходящей через t
(на самом деле можно брать любые 2 оси)
Таким образом можно задать любую плоскость в пространстве.
Формулы перехода
Перейдем к формулам.
Пусть есть две точки t1 и t2, и угол на который надо повернуть t2 относительно t1 (пусть это будет угол a) вокруг какой-то оси. Тогда формулы поворота будут иметь вид:
Код:
//вокруг оси X:
set x' = x2
set y' = y1 + (y2 - y1) * Cos( a ) + (z1 - z2) * Sin( a )
set z' = z1 + (y2 - y1) * Sin(a ) + (z2 - z1) * Cos( a )
//вокург оси Y:
set x' = x1 + (x2 - x1) * Cos( a ) + (z1 - z2) * Sin( a )
set y' = y2
set z' = z1 + (x2 - x1) * Sin( a ) + (z2 - z1) * Cos( a )
//вокруг оси X:
set x' = x1 + (x2 - x1) * Cos( a ) + (y2 - y1) * Sin( a )
set y' = y1 + (x2 - x1) * Sin( a ) + (y1 - y2) * Cos( a )
set z' = z2

Здесь x', y' и z' - новые координаты точки t2.

Опять к окуржностям


Вернемся к нашей задаче. С помощью поворотов и можно построить окружность с центром в какой либо точке и произвольным наклоном. Что для этого нужно? Не так много. Построить окружность с помощью 2d координат, и подействовать на них последовательно двумя поворотами относительно двух любых осей на требуемые углы.
На самом деле мы опять придем к сферической системе координат, но как бы с задней двери.

В примере показаны юниты летающие по поверхности цилиндра и сферы (в 2х вариациях: через сферические координаты и повороты полярной системы координат).
Каждые 5 секунд будут создавться по одному юниту для каждой системы координат.

Выкладываю пример движения по параболе. Основано на векторах, пока без комментариев и дополнений к статье.
Прикрепленные файлы
Тип файла: w3x Simple Coordinat System.w3x (21.9 Кбайт, 858 просмотров )
Тип файла: w3x Vector Move.w3x (16.3 Кбайт, 750 просмотров )

Отредактировано MF_Andreich, 09.03.2009 в 13:09.
Старый 05.02.2009, 18:29
ScorpioT1000
Работаем
offline
Опыт: отключен
перемещу в желтую прессу
если дополнить - покатит на статью

ScorpioT1000 добавил:
я думаю, если еще джон подключится.. =)
Старый 05.02.2009, 19:10
MF
Что-то вокруг не так
offline
Опыт: 26,594
Активность:
ScorpioT1000
А чем дополнить? примерами использования?
Старый 05.02.2009, 19:11
ScorpioT1000
Работаем
offline
Опыт: отключен
можно какие-нибудь удобные объекты показать и операции с ними
Старый 05.02.2009, 19:19
dk

offline
Опыт: 61,843
Активность:
Эт как бы изучается на первом курсе, иногда и в школе... Есть еще много разных систем координат. Цилиндрические, параболические и т.д. http://ru.wikipedia.org/wiki/Категория:Системы_координат

dk добавил:
Можно в статью Sergey'а с полярными координатами, эту инфу добавить...
Старый 05.02.2009, 19:49
Hellfim
Новичок
offline
Опыт: 79,880
Активность:
MF_Andreich, довольно кстати полезно. Мне как-то нужна была 3-я формула. Ты мне ее успешно тогда сказал =) Думаю теперь не буду создавать топиков на тему Сфеерических координат.
Старый 05.02.2009, 20:13
Toadcop

offline
Опыт: 53,013
Активность:
Цитата:
set x = p * Cos( a ) * Sin( t )
set y = p * Sin( a ) * Sin( t )
set z = p * Cos( t )
это единственое что актуально остальное уже оч сильно обсосано =)

движение в 3Д почти исключительно векторами делаетса... син,кос это ущербный мат способ =)
ну и однозначно нужны "игровые примеры" иначе толку то очень мало =)

сделай мульти сферы которые летают по трактории сферы =) (ну и постояно меняютса.)

dk +1
Старый 05.02.2009, 21:13
MF
Что-то вокруг не так
offline
Опыт: 26,594
Активность:
dk
Я согласен, что ничего нового, но там сверху есть оправдательная строчка!
Про другие системы я тоже знаю (учусь на 4 курсе матфака все таки ), и тоже напишу (как развитие полярной будет интересна только циллиндрическая)
Toadcop
Примеры будут, благодаря тебе и ScorpioT1000 даже знаю какие про движение на векторах полностью согласен, баловался, код балования можно найти в барахолке. (это если интересно)

Отредактировано MF_Andreich, 06.02.2009 в 04:29.
Старый 06.02.2009, 04:16
PlayerDark
Coraline
offline
Опыт: 10,569
Активность:
Почему зд полярка задается всего 2 - углами ?
Старый 06.02.2009, 13:43
Hellfim
Новичок
offline
Опыт: 79,880
Активность:
PlayerDark, эмм А сколькими должна?
Старый 06.02.2009, 13:47
PlayerDark
Coraline
offline
Опыт: 10,569
Активность:
Hellfim тремя ? по количеству плоскостей.
Старый 06.02.2009, 13:50
Hellfim
Новичок
offline
Опыт: 79,880
Активность:
PlayerDark, ммм, мне кажется или в 2д она задается 1-им углом? =)
Старый 06.02.2009, 13:52
PlayerDark
Coraline
offline
Опыт: 10,569
Активность:
Hellfim ну да, в 2д она задается одним углом в XY.
Старый 06.02.2009, 14:08
MF
Что-то вокруг не так
offline
Опыт: 26,594
Активность:
PlayerDark
На самом деле три координаты конвертируються в три координаты, 2 угла и длина.
Старый 06.02.2009, 14:09
PlayerDark
Coraline
offline
Опыт: 10,569
Активность:
А как тогда сделать крен ?
Старый 06.02.2009, 14:16
MF
Что-то вокруг не так
offline
Опыт: 26,594
Активность:
PlayerDark
Крен??? Вообще координаты относяться к точке. Крена у точки не бывает.
Старый 06.02.2009, 14:45
PlayerDark
Coraline
offline
Опыт: 10,569
Активность:
MF_Andreich если мне нужно с помощью полярок построить окружность с наклоном к поверхности ?
Старый 06.02.2009, 16:54
MF
Что-то вокруг не так
offline
Опыт: 26,594
Активность:
PlayerDark
Довольно сложный вопрос, попробовать сейчас не могу... попробую на словах высказать идею: взять нужное приращение (высчитанное для полярных), затем взять вторую вариацию сферических координат и провести такие хитрые махинации:
Умножить приращение на косинус угла крена (тау) получишь приращение для нижнего угла.
Умножить приращение на синус угла крена и поделить попалам получишь приращение для верхнего угла.
Так же нужно умножить верхнюю и нижнюю границу изменения верхнего угла на синус угла крена. (по умолчанию верхняя граница есть 90 градусов, нижняя -90. При достижении верхней границы нужно менять приращение на противоположное, так же и с нижней границей)

MF_Andreich добавил:
Это только идея... нужно эксперементировать.
Старый 06.02.2009, 18:01
MF
Что-то вокруг не так
offline
Опыт: 26,594
Активность:
PlayerDark
Я сегодня попробую. Если получиться то дополню пример еще одним ястребом.
Старый 07.02.2009, 10:33
Igores
НИИ 4А-Во! Кафедра Джасс.
offline
Опыт: 5,325
Активность:
MF_Andreich, хорошя статья, мне понравилось. Слушай, а можешь в свою статью добавить материал про параболические координаты, жутко интересно, что это такое))
Старый 07.02.2009, 18:32

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

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

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

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



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