绘制三维曲线
作者 佚名技术
来源 服务器技术
浏览
发布时间 2012-07-12
上次“极坐标应用”的贴里边,有人要画曲面,我翻了些书。但愿可以做好。今天的这个是准备活动。趁着还没有上课,我尽量把最终的效果做好发上来吧。 因为i没有编译器,不能上穿效果了。大家只好来看代码。 Flash是不能靠原有的APIs绘制3D曲线的,所以我要在2D平面得到3D的投影来表示,可是不能是平凡的投影,还要考虑透视效果。 我的基本想法是“截面”,就是对Z轴不同的点 n 建立一个平面坐标XznY,这个新的坐标有自己的一套参X0,Y0,和单位长度。然后我们根据空间原始的x,y,z得到坐标XznY的一点,在对应的转化到XZ0Y,就是真正划线的那个平面。 这个是坐标XznY的代码, class ZC { var scale;//坐标的缩放系数 var x0, y0; //坐标原点 static var zc:Array = new Array; //储存实例 private var ID; //坐标编号 static var mapping; //映射参数,还没有实现 private static var Max = 550;//影射常数参数 //构造函数,我要使用应用singleton private function ZC(z) { this.ID = z; scale = 1-z/Max; var oo1 = z*Math.tan(Math.PI/8); x0 = oo1*Math.cos(Math.PI/6); y0 = oo1*Math.sin(Math.PI/6); } //创造坐标实例 public static function getZC(z) { if(z >= Max||z<=-Max) return ; if (zc.length != 0) for (var i = 0; i return zc[i]; zc.push(new ZC(z)); return zc[zc.length-1]; } //坐标实例的ID function getID() { return this.ID; } } 在代码中有算法意义的也就是构造函数那部分了,他原则上对空间曲线的每一个点都建立一个坐标,储存准备转化到XZ0Y的信息。scale是一个XznY单位长度和XZ0Y单位长度的比 转化函数 function transfer(x, y, z) { if (z == undefined || z == null) { z = 0; } var aZC = ZC.getZC(z); var point = new Object(); point.x = aZC.x0+x*aZC.scale; point.y = aZC.y0+y*aZC.scale; return point; } 测试我画了一个圆在XY0Z平面: import ZC; #include "transfer.as" var rad = 0; onEnterFrame = function () { var x = 150*Math.cos(rad); var z = 150*Math.sin(rad); var point = transfer(x, 0, z); if (rad == 0) { _root.moveTo(point.x, point.y); } _root.lineTo(point.x, point.y); rad += .1; _root.lineStyle(1, 0, 50); }; _root._x = _root._y=200; _root._yscale = -100; 关键词:
|
|||||
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |
你可能对下面的文章感兴趣
关于绘制三维曲线的所有评论