Форум: "Игры";
Текущий архив: 2005.10.16;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.034 c