如何将3D投影至2D平面--3D初探
<div id="cnblogs_post_body">前一段时间,组里分享一个关于3D投影至2D平面上的主题,一直没有时间细细的咀嚼一下。每天的代码大部分都是在写业务逻辑,细想一下,自从毕业上班以来,一直没有去写过关于图形展示方面的东东,所以决定先入个门,以后要是有需求了也可以快速上手,也当补充一下高中的数学知识。
1,旋转
处理旋转需要用到一个旋转变换公式:
http://zh.wikipedia.org/wiki/%E5%8F%98%E6%8D%A2%E7%9F%A9%E9%98%B5#.E9.80.8F.E8.A7.86.E6.8A.95.E5.BD.B1
绕原点逆时针旋转 θ 度角的变换公式是 http://upload.wikimedia.org/wikipedia/zh/math/6/0/a/60a5d39f78b160c4f0aa61d3d5b7b82e.png 与 http://upload.wikimedia.org/wikipedia/zh/math/5/b/7/5b7e5fc6139134a38e422f5bc5a23fb9.png,用矩阵表示为:
http://upload.wikimedia.org/wikipedia/zh/math/1/f/b/1fbef76df3443005c3c8ccf047e4790f.png
由于是x,y,z的三维坐标系,所以根据上面的公式,可以得到如下的转换公式:
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:23fb6a6b-6db9-4cb6-85f7-3962f164d3c6" class="wlWriterEditableSmartContent">//向量旋转function rotateX(x, y, z, a) {//绕X轴旋转return {x: x,y: y * Math.cos(a) - z * Math.sin(a),z: y * Math.sin(a) + z * Math.cos(a)};}function rotateY(x, y, z, a) {//绕Y轴旋转return {x: x * Math.cos(a) + z * Math.sin(a),y: y,z: z * Math.cos(a) - x * Math.sin(a)};}function rotateZ(x, y, z, a) {//绕Z轴旋转return {x: x * Math.cos(a) - y * Math.sin(a),y: x * Math.sin(a) + y * Math.cos(a),z: z};}
页:
[1]