![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
AntZ |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 6.6.2007 Репутация: нет Всего: нет |
Имеются координаты объекта P = (a, b), 0° ≤ a ≤ 180° — угол между осью Z и отрезком, соединяющим начало координат и точку P. 0° ≤ b ≤ 360° — угол между осью X и проекцией отрезка, соединяющего начало координат с точкой P, на плоскость XY. Трехмерные координаты из них получаются формулами: x = r * sin a * cos b y = r * sin a * sin b z = r * cos a r - радиус сферы (положительная величина) Как представлять такую величину (вектор) как скорость и реализовать перемещение по сфере в сферических координатах? Если кто играл в Spore, то помнят, что там можно было перемещаться по планете используя стрелки. И если перемещение происходило "прямо", без поворотов влево или вправо, то можно было прийти в исходную точку. Так вот как реализовать такое перемещение? Это сообщение отредактировал(а) AntZ - 13.9.2008, 18:00 |
|||
|
||||
chipset |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4071 Регистрация: 11.1.2003 Где: Seattle, US Репутация: 27 Всего: 165 |
Ммм, угловая скорость? Радианы/сек? По другим вопросам, гугли полярные координаы
--------------------
|
|||
|
||||
Peter |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 771 Регистрация: 28.7.2003 Где: Ставрополь Репутация: -1 Всего: 1 |
AntZ, как у тебя дела с аналитической и дифференциальной геометрией? Если хорошо, могу набросать идеи, а ты сам их доведешь до ума.
Орбита точки - это пересечение твоей сферы с плоскостью, проходящей через центр, т.е. через начало координат. Общее уравнение такой плоскости: Ax+By+Cz=0. (Коэффициенты A, B, C найдешь из начальных данных - координат твоей точки и вектора скорости). Выражаем x, y, z через оба угла - полярный и азимутальный - по известным формулам. Таким образом находим связь между этими углами - алгебраическое уравнение (1). Теперь учитываем, что скорость точки по орбите постоянна. Т.е. дифференциал дуги пропорционален дифференциалу времени. Дифференциал дуги выражается через дифференциалы углов, как мне помнится, с помощью первой квадратичной формы (или можешь сам вывести формулу). Получаем вторую связь - дифференциальное уравнение (2). Интегрируем (2) с учётом (1) и находим зависимость углов от времени. Если в некоторый момент точка меняет направление движения, значит, соответственно меняются коэффициенты A, B, C в уравнении плоскости. Пересчитываем уравнение движения и двигаем точку по новой орбите. -------------------- всё, что делаете, делайте от души, как для Господа (Послание апостола Павла колоссянам, 3:23). |
|||
|
||||
Peter |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 771 Регистрация: 28.7.2003 Где: Ставрополь Репутация: -1 Всего: 1 |
А можно обойтись и без дифференциального исчисления. Уравнение движения точки по экватору:
z=0, x=r cos (wt), y=r sin (wt). Теперь надо повернуть ось вращения и пересчитать координаты. Для вычисления углов разворота оси учитываем начальные условия. -------------------- всё, что делаете, делайте от души, как для Господа (Послание апостола Павла колоссянам, 3:23). |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |