Главная страница
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.044 c
14-1127814651
XGarik
2005-09-27 13:50
2005.10.16
RegEx


3-1125912944
suharew
2005-09-05 13:35
2005.10.16
Обрыв соединения с БД Interbase


4-1124264334
Shopot
2005-08-17 11:38
2005.10.16
Как конвертировать WideChar to Char?


1-1127494403
злобная танька
2005-09-23 20:53
2005.10.16
Инициализация массива


11-1108223021
mordush
2005-02-12 18:43
2005.10.16
KOL,KOL и ещё раз KOL