Главная страница
    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.46 MB
Время: 0.034 c
3-1125640655
-=snoop=-
2005-09-02 09:57
2005.10.16
Добавление записей в таб...


3-1125769275
HITMAN
2005-09-03 21:41
2005.10.16
Подскажите как создать файл.BD


14-1127543055
Карелин Артем
2005-09-24 10:24
2005.10.16
Что за сервер на IP 65.254.40.210?


1-1127510896
Студент:(
2005-09-24 01:28
2005.10.16
Вычисление С в степени N с минимальным количеством умножений


1-1127819912
elected
2005-09-27 15:18
2005.10.16
Break Point не ставится в DLL проекте





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский