![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Vector to Angle (проблема с трегонометрией) [Delphi, OpenGL, Windows]
Кефир87 © (2005-06-06 18:54:00)Не большая проблемка. Есть:
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 но где?...
frame (2005-06-07 23:44:00) [1]Всё очень просто: считаем арктангенс, если меньше нуля - прибавляем 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 это всё есть на паскале, по я прошёлся отладчиком - код и по размеру и по скорости не выдерживает никакой критики)
Кефир87 (2005-06-07 22:58:00) [2]У меня по ассемблеру только базовые знания... Но что, черт возьми, это за комманды? Однако попробую, спасибо 8)
frame (2005-06-07 21:43:00) [3]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;
keal (2005-06-07 13:16:00) [4]где-то у меня есть исходники работающего вычисления, не могу найти... попробуй так
yang := ArcSin(Result.ny);
xang := ArcSin(Result.nz / cweCos(yang));
или
xang := ArcCos(Result.nx / cweCos(yang));
Zer0 (2005-06-07 00:59:00) [5]для начала нужно определить: относительно каких векторов будем мерять углы и в какой системе координат(бывают сферические, цилиндрические, декартовы, биконические и проч.)
Кефир87 (2005-06-06 22:12:00) [6]Видать не только у меня проблемы 8) Или эта задача не имеет решения...