Главная страница
    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.45 MB
Время: 0.032 c
3-1125834784
Кабан
2005-09-04 15:53
2005.10.16
Выподающий список.


2-1127253384
Цукор 5
2005-09-21 01:56
2005.10.16
Exit


14-1127299293
leonidus
2005-09-21 14:41
2005.10.16
Генератор отчетов


1-1127802201
Mishenka
2005-09-27 10:23
2005.10.16
Как отловить событие перехода фокуса?


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





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский