Elite Games - Свобода среди звезд!
.
ВНИМАНИЕ!
Наша конференция посвящена космической тематике и компьютерным играм.
Политические вопросы и происходящие в мире события в данный момент на нашем сайте не обсуждаются!

  » создание модов для орбитера. программы. | страница 2
Конференция предназначена для общения пилотов. Для удобства она разделена на каналы, каждый из которых посвящен определенной игре. Пожалуйста, открывайте темы только в соответствующих каналах и после того, как убедитесь, что данный вопрос не обсуждался ранее.

Поиск | Правила конференции | Фотоальбом | Регистрация | Список пилотов | Профиль | Войти и проверить личные сообщения | Вход

   Страница 2 из 2
На страницу: Пред.  1, 2 | Все страницы
Поиск в этой теме:
Канал Orbiter: «создание модов для орбитера. программы.»
astronavt
 86 EGP


Рейтинг канала: 1(3)
Репутация: 35
Сообщения: 403
Откуда: Новочеркасск
Зарегистрирован: 11.01.2006
Да, кстати. Сейчас дома инета нет, поэтому доступа по FTP не имею. В этой связи с выкладыванием мануала по IMFD с вашими коментариями придется подождать. Думаю скоро разрулю свои проблемы с телефоном.
_________________
Я бы изменил этот мир, но Бог не дает мне исходников...
    Добавлено: 10:47 02-02-2006   
Kulch
 105 EGP


Рейтинг канала: 2(21)
Репутация: 29
Сообщения: 604
Откуда: Россия, Санкт-Петербург
Зарегистрирован: 24.08.2004
Bloodest, полагаю, нуждаюсь в вашей помощи. Мне нужно перевести вектор из местной локальной горизонтальной системы координат в локальную корабля. Локалная горизонтальная СК - это то, во что переводит локальный вектор функция HorizonRot. Мне нужно решить обратную задачу и я, признаться, запутался...
_________________
Юрий Кульчицкий aka Kulch
    Добавлено: 11:25 16-02-2006   
Bloodest
 155 EGP


Рейтинг канала: 3(40)
Репутация: 18
Сообщения: 944
Откуда: Питерские мы
Зарегистрирован: 07.10.2004
Ну если не гризонтальная а СК местного горизонта в экваториальной нотации.

//Первый ход Получаем положение корабля в глоб координатах относительно планетыи преобразем его в представление Долгота-Широта-Радиус
void Mars75_VZOR_BM_PRG79:: Coordinats (double MJT,OBJHANDLE hPlanet,VECTOR3 &Location)
{
double Obl = oapiGetPlanetObliquity (hPlanet);
double Tet = oapiGetPlanetTheta (hPlanet);
double rot = oapiGetPlanetCurrentRotation (hPlanet);
double period = oapiGetPlanetPeriod (hPlanet);
if(period !=0) rot = (MJT - oapiGetSimMJD())*24.*3600./period*2.*PI +rot;
VECTOR3 RotTeta=_V(0,Tet,0);
VECTOR3 RotObl =_V(Obl,0,0);
VECTOR3 Rotrot =_V(0,rot,0);
VECTOR3 tmp,tmp2;
RotateVector(Location,-RotTeta, tmp);
RotateVector(tmp,RotObl , tmp2);
RotateVector(tmp2, - Rotrot, tmp);
Location.x = atan2(tmp.z,tmp.x);
Location.y = atan2(tmp.y,sqrt(tmp.z*tmp.z+tmp.x*tmp.x));
Location.z = length(tmp);
};
//Втрой ход смещаем точку на заданные величины локальной горизонтальной (ХYZ) - добавляем высоту (Location.z+Y) - широту (Location.y + Z/Location.z) долготу (Location.x + X/Location.z*cos(Location.y))

//Третий ход (Обратное преобразование)
void Mars75_VZOR_BM_PRG79:: Position(double MJT,OBJHANDLE hPlanet,VECTOR3 &Location)
{
VECTOR3 tmp,tmp2;
tmp.x = Location.z*fabs(cos(Location.y))*cos(Location.x);
tmp.z = Location.z*fabs(cos(Location.y))*sin(Location.x);
tmp.y = Location.z*sin(Location.y);
MATRIX3 mat;
oapiGetPlanetObliquityMatrix(hPlanet, &mat);
double rot = oapiGetPlanetCurrentRotation (hPlanet);
double period = oapiGetPlanetPeriod (hPlanet);
if(period !=0) rot = (MJT - oapiGetSimMJD())*24.*3600./period*2.*PI +rot;
MATRIX3 mat2;
mat2.m11 =cos(rot);mat2.m12 =0;mat2.m13 = - sin(rot);
mat2.m21 =0 ;mat2.m22 =1;mat2.m23 = 0 ;
mat2.m31 =sin(rot);mat2.m32 =0;mat2.m33 = cos(rot);
MultiplyByMatrix(tmp , mat2, tmp2);
MultiplyByMatrix(tmp2, mat , Location);
}
// Четвертый шаг - тривиальное преобразование из глобала в локал

Зы самплы несколько экликтичны + есть кое что лишнее (для данного случая) но работают железно. Собственно разарабатывались под автомат подхода к базе ...
    Добавлено: 19:46 16-02-2006   
Kulch
 105 EGP


Рейтинг канала: 2(21)
Репутация: 29
Сообщения: 604
Откуда: Россия, Санкт-Петербург
Зарегистрирован: 24.08.2004
Спасибо! Ваш пример, похоже, очень поможет мне при разработке автопилота горизонтальной посадки.

А сейчас я нашел способ попроще:

const VECTOR3 ort_X = _V(1,0,0);
const VECTOR3 ort_Y = _V(0,1,0);
const VECTOR3 ort_Z = _V(0,0,1);
.....

//определяем локальную ск в горизонтальной
vesselobjV->HorizonRot(ort_X, X_point);
vesselobjV->HorizonRot(ort_Y, Y_point);
vesselobjV->HorizonRot(ort_Z, Z_point);

//получаем матрицу поворота координат
MATRIX3 M_rot;
M_rot.m11 = X_point.x; M_rot.m21 = X_point.y; M_rot.m31 = X_point.z;
M_rot.m12 = Y_point.x; M_rot.m22 = Y_point.y; M_rot.m32 = Y_point.z;
M_rot.m13 = Z_point.x; M_rot.m23 = Z_point.y; M_rot.m33 = Z_point.z;

//имеем вектор в горизонтальной ск
//пусть он называется v_hor

VECTOR3 v_loc;

//пусть определены операции умножения матрицы на вектор и взятия
//обратной матрицы
// вуаля!
v_loc = (!M_rot) * v_hor;
_________________
Юрий Кульчицкий aka Kulch
    Добавлено: 18:26 18-02-2006   
Bloodest
 155 EGP


Рейтинг канала: 3(40)
Репутация: 18
Сообщения: 944
Откуда: Питерские мы
Зарегистрирован: 07.10.2004
Замечательно !!! Только ИМХО последняя стадия проще будет через кватернионы.
Рыба с кодом операций
http://www.gamedev.ru/articles/?id=30129
1.Матрицу загоняем в кватернион
unit_from_matrix
2.Меняем направление вращения
w=-w;
3.Вращаем v_loc в искомый вектор.

ЗЫ надо попробывать сразу получить кватернион из двух векторов.
ort= _V(1,1,1)
vesselobjV->HorizonRot(ort, point);
jось вращения ax= crossp(ort,point);
угол an=acos(dotp(ort,point)/length(ort)/length(point));
Далее по рыбе unit_from_axis_angle
    Добавлено: 09:51 20-02-2006   
Kulch
 105 EGP


Рейтинг канала: 2(21)
Репутация: 29
Сообщения: 604
Откуда: Россия, Санкт-Петербург
Зарегистрирован: 24.08.2004
Поправочка.

Поскольку при преобразовании координат нету масштабирования, то операция взятия обратной матрицы заменяется на операцию транспонирования, что заметно упрощает задачу.
_________________
Юрий Кульчицкий aka Kulch
    Добавлено: 16:46 20-02-2006   
Канал Orbiter: «создание модов для орбитера. программы.»
На страницу: Пред.  1, 2 | Все страницы
  
Показать: 
Предыдущая тема | Следующая тема |
К списку каналов | Наверх страницы
Цитата не в тему: А вы в одном корабле будете летать и держацца за руку, или же каждый в своем и держацца за руки? Ежели второй вариант, то хотелось бы уточнить длину ваших рук, просто так, на фсякий случай. (Nadin)

  » создание модов для орбитера. программы. | страница 2
Каналы: Новости | Elite | Elite: Dangerous | Freelancer | Star Citizen | X-Tension/X-BTF | X2: The Threat | X3: Reunion | X3: Terran Conflict | X Rebirth | X4: Foundations | EVE Online | Orbiter | Kerbal Space Program | Evochron | VoidExpanse | Космические Миры | Онлайновые игры | Другие игры | Цифровая дистрибуция | play.elite-games.ru | ЗВ 2: Гражданская война | Творчество | Железо | Игра Мечты | Сайт
   Дизайн Elite Games V5 beta.18