Войти
ПрограммированиеФорумОбщее

Неортодоксальная сферическая система координат

Страницы: 1 2 Следующая »
#0
18:22, 5 авг. 2019

Сферической математики тема.

Общепринятая сферическая система координат имеет 3 параметра - широта, долгота, расстояние до центра. Каждая координата задаёт набор плоскостей по-своему: широта задаёт набор параллельных плоскостей, долгота задаёт набор поулплоскостей, проходящих через линию полюсов, расстояние до центра задаёт набор концентрических сфер.
Так вот, меня такой расклад не устраивает, и мне хочется сферической системы координат с однородными по сути координатами. Поразмыслив, я нашёл что-то подобное: каждая координата задаёт набор полуплоскостей, каждая из которых проходит через главную ось данной координаты. Все три главных оси взаимно перпендикулярны друг другу.
Вопросы здесь следующие:
1) Представимы ли однозначно все точки трёхмерного пространства в данной системе координат?
2) Если да, то как по-научному называется данная система координат?


#1
19:17, 5 авг. 2019

Panzerschrek[CN]
> 1) Представимы ли однозначно все точки трёхмерного пространства в данной
> системе координат?
Думаю представимы. Тут скорее будет наоборот, 2/3 таких координат нельзя будет перевести в декартовы.
А зачем тебе такой велосипед?

#2
1:42, 6 авг. 2019

Есть вход, есть выход.
Посередине твой код.
Там измышляешь в абстркциях отцов,
"Отцы маразмом не болели"
Отцы пасли коров!
За это только я готов
Челом бить.

#3
14:39, 6 авг. 2019

Panzerschrek[CN]
> каждая координата задаёт набор полуплоскостей, каждая из которых проходит через
> главную ось данной координаты. Все три главных оси взаимно перпендикулярны друг
> другу.
Если я правильно понял идею, такие полуплоскости будут пересекаться только в начале координат. То есть нет особого смысла в такой координации.

#4
(Правка: 16:14) 16:03, 6 авг. 2019

А в чем вообще должен состоять критерий "сферичности" системы координат, если она будет без широты/долготы? То есть, скажем, почему не подходит декартова система координат, какой критерий мешает ее использовать в данной задаче?

UPD. Понял. Ты хочешь систему координат, чтоб она задавалась тремя углами, при этом чтоб каждый угол влиял на точку таким же способом, как и другие углы

#5
16:25, 6 авг. 2019

Взять декартову систему координат, только скармливать ей три тангенса. Вот тебе три угла (-90;+90), все взаимнооднозначно соответствует, никаких вырождений, углы работают одинаковым образом :)

#6
16:30, 6 авг. 2019

Sbtrn. Devil
> Если я правильно понял идею, такие полуплоскости будут пересекаться только в
> начале координат. То есть нет особого смысла в такой координации.
Ты прав, отчасти.
Три полуплоскости только там и будут пересекаться, так что не будет профита для представления координат в трёхмерном пространстве. Но можно использовать пересечение двух полуплоскостей для представления координат на сфере.

Dmitry_Milk
> А в чем вообще должен состоять критерий "сферичности"
Сфера в основе, и как следствие - вычисление синусов/косинусов для перевода в декартову систему координат.

> Ты хочешь систему координат, чтоб она задавалась тремя углами, при этом чтоб
> каждый угол влиял на точку таким же способом, как и другие углы
Именно.

> почему не подходит декартова система координат
Потому, что требуемое пространство - не евклидово.

#7
17:14, 6 авг. 2019

Panzerschrek[CN]
> Потому, что требуемое пространство - не евклидово.

Не знаю, какого именно типа у тебя пространство, я пару лет назад "ради посмотреть, как там выглядит" делал 3D-леталку  в гиперсферическом пространстве. В этом конкретном неевклидовом случае я поступил проще - воспользовался 4D-координатами на единичной гиперсфере, а все возможные движения (как поступательные, так и вращательные) свелись к 6 возможным поворотам матрицы 4x4.

#8
19:19, 6 авг. 2019

Dmitry_Milk
> 3D-леталку в гиперсферическом пространстве.
Ну у меня такая же задумка.
А можешь скинуть ссылку на твою леталку? Желательно с кодом.

#9
21:32, 6 авг. 2019

Она на третьем питоне, собственно и есть код (точнее говнокод, в одном файле все напихано, уж извините, писалось просто ради посмотреть, так что сильно не бейте)
hyperspheric
Чтоб запустить - требует наличия пакетов PyOpenGL и numpy
pip install PyOpenGL
pip install numpy
На основе freeglut (в архиве freeglut для 64-битной винды), теоретически должна работать под любой осью, для которой есть freeglut.

Механика Descent-подобная, с некоммутативностью поворотов (требует умения стабилизировать корабль)
e,d,s,f - вперед/назад/влево/вправо,
правая кнопка мыши - подъем, пробел - спуск
w,r - стабилизация крена
x,v - быстрый поворот
a - увеличение скорости вперед/назад
c - вкл/выкл круиз-режим (поступательное движение замораживается, остается только контроль поворотов)
t(удерживая) - управление положением головы вместо ориентации корабля
F3 - вкл/выкл fullscreen
F4 - вкл/выкл SBS-стерео
F10 - выход

В основном большая часть кода - это заполнение VBO (фактически вся отрисовка одним дравколом). События ближе к концу.

Из математики в коде (MoveShip) - только модификация матрицы вида (self.state).
Вся остальная математика (в частности вычисление углов для освещения по Фонгу) практически вся в шейдерах вначале.
vec4 projection(vec4 A) - вычисление экранных координат вертекса
mat2x4 lighting_components(vec4 A, vec4 N, float a_shininess, float a_specular_coef) - адаптация освещения по Фонгу к гиперсферической геометрии (вычисляет коэффициенты для диффузного и спекулярного освещения)

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

К вышеописанной математике обычной сферы была добавлена еще одна координата W. Наблюдатель считается находящимся в точке (0, 0, 0, 1), "под" ним вращается гиперсфера с миром Фактически  передается обычной ViewMatrix 4x4 старого OpenGL, но в данном случае равноправны все 4 координаты. В случае двумерной сферы имеется два поворота, соответсвующих поступательному движению по сфере, и один поворот, соответсвующий обычному повороту, а для гиперсферы мы имеем уже 6 поворотов, из них три поворота (x/w, y/w, z/w) - соответствуют поступательному движению, оставшиеся три (x/y, y/z, z/x) - обычным поворотам.

#10
21:32, 6 авг. 2019

Для хоть какой-то ориентации гиперсфера поделена на 8 "секторов" соответствующих проекциям тессеракта на гиперсферу. Из центов секторов секторы выглядят кубами, хотя возле граней видно, что у этих "кубов" грани смыкаются под углом 120 градусов, а не 90. Так что в каждом ребре сходятся не четыре, а три "куба". Ну и прочие интересности на больших масштабах - равносторонние треугольники, у которых все три угла прямые, "тетраэдры", у которых все грани смыкаются под углами 90 градусов, принципиальное отсутствие какого-либо глобального направления (поднялся на сектор вверх, сдвинулся на сектор вправо, опустился на сектор вниз - и ты уже в исходном секторе, только лежа "на боку")

Что меня лично удивило - все прямые выглядят прямыми, а не изогнутыми, несмотря на неевклидовость.

#11
(Правка: 21:43) 21:41, 6 авг. 2019

Да, еще одна особенность этой гиперсферической математики - нормали всегда являются 4D-перпендикулярами к вектору-координате их применения (это можно увидеть и из обычной сферической геометрии, если не забывать, что и координаты ВСЕХ точек - также единичные векторы, как и нормали). То есть, например, для точки (0, 0, 0, 1) нормаль будет лежать строго в подпространстве W=0.

В коде есть полезная функция FindNormal, как раз вычисляющая нормаль к треугольнику.

#12
17:56, 7 авг. 2019

Panzerschrek[CN]
> Но можно использовать пересечение двух полуплоскостей для представления
> координат на сфере.
Они тоже будут не очень равноправны. Например, координата S - плоскость xy вращается вокруг y, координата T - плоскость zy вращается вокруг z. Тогда при T=0 с любым S будет один и тот же луч, а при S=0 разное T будет разными лучами.
Вообще, скорее всего, на сфере простые равноправные координаты ввести нельзя - теорема о причесании ежа намекает на такое следствие. Можно только с извращениями.

#13
20:43, 7 авг. 2019

Sbtrn. Devil
> Вообще, скорее всего, на сфере простые равноправные координаты ввести нельзя

Я уже выше дал пример именно для (гипер)сферы - декартовы координаты размерностью на 1 больше с ограничением на константность расстояния до начала координат. В результате, получаем N+1 равноправных координат с N степеней свободы.

#14
0:08, 8 авг. 2019

Dmitry_Milk
> декартовы координаты размерностью на 1 больше с ограничением на константность
> расстояния до начала координат.
Ну вот это как раз "с извращениями". Впрочем, лишь бы работало.

У меня когда-то была другая идея. Корабль может летать в космосе и над планетой, но на планете карта - с прямоугольными 2Д координатами и, следовательно, тороидальной топологии, а из космоса она должна быть сферической. Поэтому думал на предмет какого-нибудь - понятно, не "честного", но хотя бы примерно правдоподобного - способа отобразить сферические координаты на тор, чтобы при подлёте к планете на атмосферную высоту вычислить, в какую точку тора корабль попадает. Но правдоподобного ничего не придумалось. :(

Страницы: 1 2 Следующая »
ПрограммированиеФорумОбщее