Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.10.16;
Скачать: CL | DM;

Вниз

Vector to Angle (проблема с трегонометрией)   Найти похожие ветки 

 
Кефир87   (2005-06-06 18:54) [0]

Не большая проблемка. Есть:

 CWEVector = record
   nx,ny,nz:GLfloat;
 end;

 CWEAngle3d = record
   xang,yang : GLfloat;
 end;


С преобразованием углов в вектор все нормально:
function  cweGenVectora(xang,yang:Glfloat):CWEVector;
var
 a : GLfloat;
begin
 a := cweCos(yang);
 Result.nx := cweCos(xang)*a;
 Result.nz := cweSin(xang)*a;
 Result.ny := cweSin(yang);
end;

Есть и другая интерпретация но думаю все понятно...

Вот теперь мне нужно из вектора получать обратно два угла. Ну во так вот мне нужно.
Ясно что нужны arcsin и arccos но где?...


 
Кефир87   (2005-06-06 22:12) [1]

Видать не только у меня проблемы 8) Или эта задача не имеет решения...


 
Zer0 ©   (2005-06-07 00:59) [2]

для начала нужно определить: относительно каких векторов будем мерять углы и в какой системе координат(бывают сферические, цилиндрические, декартовы, биконические и проч.)


 
keal   (2005-06-07 13:16) [3]

где-то у меня есть исходники работающего вычисления, не могу найти... попробуй так

yang := ArcSin(Result.ny);

xang := ArcSin(Result.nz / cweCos(yang));
 или  
xang := ArcCos(Result.nx / cweCos(yang));


 
frame ©   (2005-06-07 21:43) [4]

ArsSin и Arccos считаются через ArcTan, намного проще считать через него,вообще попробуй мою реализацию

function GetAngle(dX,dY:Extended):Extended;assembler;
asm
fld dY
fld dX
fpatan
ftst
fstsw ax
sahf
jnbe @@exit
fldpi
fadd st,st
faddp
@@exit:
fwait
end;


 
Кефир87   (2005-06-07 22:58) [5]

У меня по ассемблеру только базовые знания... Но что, черт возьми, это за комманды? Однако попробую, спасибо 8)


 
frame ©   (2005-06-07 23:44) [6]

Всё очень просто: считаем арктангенс, если меньше нуля - прибавляем 2*пи. Если всё-таки нужны арксинусы-косинусы, не используй math(просто зря увеличивает размер программы), возьми вот это:

function ArcCos(X:Extended):Extended;assembler;
asm
  fld1    
  fld X
  fmul st,st
  fchs
  faddp
  fsqrt
  fld X
  fpatan
  fwait
end;

function ArcSin(X:Extended):Extended;assembler;
asm
  fld X
  fld1
  fld X
  fmul st,st
  fchs
  faddp
  fsqrt
  fpatan
  fwait
end;

В math.pas это всё есть на паскале, по я прошёлся отладчиком - код и по размеру и по скорости не выдерживает никакой критики)



Страницы: 1 вся ветка

Текущий архив: 2005.10.16;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.064 c
1-1127480355
RiP
2005-09-23 16:59
2005.10.16
подскажите как сделать анимацию из нескольких BMP


14-1127374918
data
2005-09-22 11:41
2005.10.16
у кого есть знакомые в Канаде, которые собираются ехать в Москву?


1-1127867033
Димыч
2005-09-28 04:23
2005.10.16
Контейнер с файлами


2-1126454439
Зм1й
2005-09-11 20:00
2005.10.16
Вывести собщение


14-1127393573
Андрей Жук
2005-09-22 16:52
2005.10.16
Шо творится...