![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Вращение в 3D пространстве
dcu © (2003-06-12 12:38:00)
Помогите!!!!!
Мне надо повернуть точку по осям X Y Z .
Можете подсказать какие небудь функции ????????
Например:
function xRotate(x,y,z:integer; angle:integer): integer;
begin
...
end;
function yRotate ...
PLIZZ!!!!!!!!!!!!!!!!!!!!
dcu (2003-06-12 16:55:00) [1]
Спасибо !!!!! Всё понял . Ща буду пробовать !
Asteroid (2003-06-12 15:53:00) [2]
Особенно мне нравится повернуть точку.
com2003 (2003-06-12 14:50:00) [3]Углы поворота меряют в радианах(real);
Лучше координаты сделать вещественными(для точности), так как при многократных поворотах будут сильные искажения.
Вообще для поворота используют матрицы,но можно и без них, хотя они более универсальны.
Обойдемся без матриц:
Type TPointz=record
x,y,z:real;
( var p:TPointz; dx:real) [1]Углы поворота меряют в радианах(real);
Лучше координаты сделать вещественными(для точности), так как при многократных поворотах будут сильные искажения.
Вообще для поворота используют матрицы,но можно и без них, хотя они более универсальны.
Обойдемся без матриц:
Type TPointz=record
x,y,z:real;
end;
...
Procedure xRotate(var p:TPointz; dx:real);
var p1:TPointz;
begin
p1:=p;
p.y:=cos(dx)*p1.y+sin(dx)*p1.z;
p.z:=cos(dx)*p1.z-sin(dx)*p1.y;
end;
...
Вокруг остальных осей:
Oy:
p.x:=cos(dy)*p1.x+sin(dy)*p1.z;
p.z:=cos(dy)*p1.x-sin(dy)*p1.z;
Oz:
p.x:=cos(dz)*p1.x+sin(dz)*p1.y;
p.y:=cos(dz)*p1.x-sin(dz)*p1.y;
dx, dy, dz - углы поворота.