Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > разработка игр, графический дизайн и моделирование > Gamedev - cоздание игр: Unity, OpenGL, DirectX
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.05.2010, 02:02   #1
Kostia
Участник клуба
 
Аватар для Kostia
 
Регистрация: 21.11.2007
Сообщений: 1,691
По умолчанию Различные системы координат

Немного про разные системы координат, думаю эта информация будет полезна.
Декартова система координат является частным случаем криволинейных систем координат, впрочем как и все остальные рассмотренные в этой статье.
Я подробно рассмотрю полярную и сферическую системы координат, а с остальными можно будет по аналогии разобраться самим. И так...
Полярная система координат, немного картинок с wiki:
от полярной системы координат к декартовой:

от декартовой системы координат к полярной:

Ох, не нравится мне эта картинка...
ну в общем p - это расстояние от начала координат до точки или проще говоря длинна радиус вектора.
угол фи - это угол между радиус вектором и осью х. фи=arctan(y/x) все нюансы на картинке(при x=0)

Такс, что нам это дает, ну например можно двигать точку на плоскости
Код:
p=sqrt(x*x+y*y);
p+=d;//увеличиваем расстояние на d
a=atan2(y,x);//это угол фи
//обратный переход в декартову систему
x=p*cos(a);
y=p*sin(a);
Теперь можно провести упрощения, можно хранить положение точек сразу в полярной системе координат, т.е. вместо x и y, p и a; Или оптимизировать выше написанный код:
Код:
a=atan2(y,x);//это угол фи
//обратный переход в декартову
x+=d*cos(a);
y+=d*sin(a);
Угол считать каждый раз не обязательно, его можно хранить в отдельной переменной и менять самостоятельно, например по нажатию на клавиши стрелок, рассчитывать относительно курсора или по своим хитрым формулам(самонаводящиеся ракета, которая плавно меняет траекторию полета)

Вот беда, а как же в 3D, ведь есть только sin и cos? Решение сферическая или цилиндрическая системы координат.
Сферическая система координат:
немного картинок с wiki:



r - расстояние от начала координат до точки
угол тэта меняется в пределах [0,pi]
угол фи меняется в пределах [0,2*pi)
крен, тангаж, рыскание:
Код:
a=atan2(y,x);//это угол фи
b=atan2(sqrt(x*x+y*y), z); //это угол тэта
//обратный переход в декартову
x=r*cos(a)*sin(b);
y=r*sin(a)*sin(b);
z=r*cos(b);
Все остальное по аналогии с движением в 2d пространстве(по поверхности). Задаем углы ориентации фи и тэта и меняем радиус, вот и получается движение в 3d пространстве.

Существуют еще и такие "штуки" как кватернионы, но про них нужно писать отдельную большую статью, хотя зачем, их и так полно:
http://nehe.gamedev.net/data/lessons...n_Camera_Class
http://www.gamedev.ru/code/articles/...BE%D0%BD%D1%8B
Kostia вне форума Ответить с цитированием
Старый 13.05.2010, 15:45   #2
Вадим Буренков
Участник клуба
 
Аватар для Вадим Буренков
 
Регистрация: 06.03.2009
Сообщений: 1,346
По умолчанию

А можно спросить зачем все это. Что конкретно можно реализовать с использованием, например Декартовой системы?
Вадим Буренков вне форума Ответить с цитированием
Старый 13.05.2010, 17:54   #3
Kostia
Участник клуба
 
Аватар для Kostia
 
Регистрация: 21.11.2007
Сообщений: 1,691
По умолчанию

Можно реализовать движение камеры в пространстве.

Например фиксируем положение курсора в центре окна и при его движение проверяем его смещение относительно центра в соответствии меняем углы фи(курсор смещен вправо или влево относительно центра) и тета.

Или можно простенький авиасимулятор сделать.

Ну а полярная она и за полярным кругом полярная. Сразу отпадают вопросы как поворачивать что-то за мышкой или чем-то еще. Как двигаться по направлению взора персонажа и т.п.

Воть, в общем это один из способов задания ориентации объекта в пространстве. Можно юзать матрицы вращения или кватернионы, но я считаю что с формулами перехода из одной системы в другую более понятнее тому же школьнику, нежели начинать грузить матричными произведениями и т.п.

Последний раз редактировалось Kostia; 13.05.2010 в 18:10.
Kostia вне форума Ответить с цитированием
Старый 13.05.2010, 17:54   #4
Kostia
Участник клуба
 
Аватар для Kostia
 
Регистрация: 21.11.2007
Сообщений: 1,691
По умолчанию

double post...
Kostia вне форума Ответить с цитированием
Старый 13.05.2010, 18:32   #5
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

Ну нам мой взгляд - тут чисто прописные истины геометрии средних (или каких там) классов.
Ладно бы это была еще какая-то база для конкретных примеров применения, а то - чисто голый фундамент (причем где-то из соседей первого торжественно заложенного камня). И совершенно никакого практического применения.
Не в обиду будь сказано, но на мой взгляд, материал в текущем состоянии - абсолютно бесполезен.
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Старый 13.05.2010, 20:02   #6
Kostia
Участник клуба
 
Аватар для Kostia
 
Регистрация: 21.11.2007
Сообщений: 1,691
По умолчанию First Person Shooter Controls

Вот simple так сказать by Kostia.
Управление персом в пространстве от первого лица использую сферическую систему координат.
Плюсы метода, прост, гибок, можно легко задать ограничения угла поворота головы, можно легко ввести прыжок...
Хождение по поверхности можно легко представить в цилиндрической системе координат.
x=p*cos(a); //a-угол фи, для сферической и цилиндрической один на двоих
y=p*sin(a);
z=z; //высота ландшафта
Ну а ориентация "прицела" или "взора" игрока легко задается в сферических координатах. Расчет полете пули после выстрела игрока, например из автомата, легко рассчитать в сферической системе координат.
Вложения
Тип файла: rar Spherical_coordinate_system.rar (143.1 Кб, 41 просмотров)
Kostia вне форума Ответить с цитированием
Старый 13.05.2010, 22:47   #7
Levsha100
Заблокирован
Старожил
 
Регистрация: 20.07.2008
Сообщений: 4,033
По умолчанию

Точку на плоскости можно задать тремя способами(по две координаты).
длина-длина
угол-угол
угол-длина
Levsha100 вне форума Ответить с цитированием
Старый 14.05.2010, 12:43   #8
Kostia
Участник клуба
 
Аватар для Kostia
 
Регистрация: 21.11.2007
Сообщений: 1,691
По умолчанию

угол-угол - это как??? Как можно точку с координатами (100,100) задать двумя углами?
Kostia вне форума Ответить с цитированием
Старый 14.05.2010, 13:39   #9
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

Вот есть у нас, например, две базовые точки с координатами (0, 0) и (0, 200) Да, это координаты в совсем другой системе координат, в декартовой, привязанной неизвестно к чему, но забудем пока об этом и будем считать, что все нормально
Соответственно, мы можем построить луч из точки A (первая) в точку B (вторая). Вот от этого луча мы и будем отсчитывать углы (скажем, против часовой стрелки, как нас в детстве научили). Выглядеть это будет так: из точки A выходит луч, угол phi между которым и лучем AB равен pi/4. Это - первая координата. Из точки B в свою очередь выходит луч, составляющий с лучем AB угол 3*pi/4. Это - вторая координата. Как нетрудно догадаться, эти два луча (выходящие из точек A и B соответственно) пересекаются в единственной точке - в точке с координатами в той самой декартовой системе (100, 100). А в СК типа угол-угол, привязанной к двум указанным точкам ее координаты будут (pi/4, 3*pi/4).
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перевод в различные системы исчисления ~AngelOK~ Компоненты Delphi 1 11.10.2009 16:57
Преобразование координат системы СК-42 Македонский Общие вопросы Delphi 5 09.03.2009 14:15
Перевод числа в различные системы счисления ...Оленька... Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 14.12.2008 16:08
Определить длину отрезка во 2-м квадранте системы координат kolduev Помощь студентам 9 13.02.2008 17:45