【发布时间】:2010-09-14 05:34:55
【问题描述】:
我正在处理 3D 网格数据,其中有很多 3D 三角形,我需要旋转它们以消除 Z 值,将其转换为 2D 三角形。
使用这个 2D 三角形,我正在做一些矢量计算。
完成工作后,我需要将其旋转回原来的角度,以便旧点恢复到原来的位置,以适应 3D 网格。
编辑:这是我正在使用的代码。
我不知道如何反转旋转。
输入
var p1:Object, p2:Object, p3:Object;
找正常人脸
var norm:Object = calcNormal(p1,p2,p3);
根据法线求旋转角度
sinteta = -norm.y / Math.sqrt(norm.x * norm.x + norm.y * norm.y);
costeta = norm.x / Math.sqrt(norm.x * norm.x + norm.y * norm.y);
sinfi = -Math.sqrt(norm.x * norm.x + norm.y * norm.y);
cosfi = norm.z;
绕 Z 旋转,然后绕 Y 旋转以与 z 平面对齐。
lx = costeta * cosfi;
ly = -sinteta * cosfi;
lz = sinfi;
mx = sinteta;
my = costeta;
mz = 0;
nx = -sinfi * costeta;
ny = sinfi * sinteta;
nz = cosfi;
var np1:Object = {};
np1.x=p1.x*lx + p1.y*ly + p1.z*lz;
np1.y=p1.x*mx + p1.y*my + p1.z*mz;
np1.z=p1.x*nx + p1.y*ny + p1.z*nz;
var np2:Object = {};
np2.x=p2.x*lx + p2.y*ly + p2.z*lz;
np2.y=p2.x*mx + p2.y*my + p2.z*mz;
np2.z=p2.x*nx + p2.y*ny + p2.z*nz;
var np3:Object = {};
np3.x=p3.x*lx + p3.y*ly + p3.z*lz;
np3.y=p3.x*mx + p3.y*my + p3.z*mz;
np3.z=p3.x*nx + p3.y*ny + p3.z*nz;
【问题讨论】:
-
不确定我是否理解了这个问题。你能举一个简单的例子来说明如何旋转一个简单的多边形吗?