一个菜鸟是如何用curveTo画出双曲线的
作者 佚名技术
来源 服务器技术
浏览
发布时间 2012-07-13
dd[3].x = a+c; } for (var j = 0; j<=3; j++) { this.dd[j].sqxfz(this.a, this.b);//按双曲线方程计算端点的y坐标值 } with (this) {//计算出各控制点的坐标,用的是sqxjd方法 jd[1].x = dd[0].x; jd[1].y = sqxqx(dd[1]).k*dd[0].x+sqxqx(dd[1]).t; jd[2] = qxjd(dd[1], dd[2]); jd[3] = qxjd(dd[2], dd[3]); } } Point.prototype.sqxfz = function(a, b) {//双曲线赋值方法,用于计算已知x坐标的点的y坐标值 this.y = Math.sqrt(this.x*this.x*b*b/(a*a)-b*b); }; Shuangquxian.prototype.sqxqx = function(p) {//求双曲线切线的方法,参数p是双曲线上任意一点 var a = this.a, b = this.b; return {k:b*b*p.x/(a*a*p.y), t:-b*b/p.y}; }; Shuangquxian.prototype.qxjd = function(a, b) {//求两条切线的交点,a、b是两个切线的切点 var fc1 = this.sqxqx(a); var fc2 = this.sqxqx(b); var x = (fc2.t-fc1.t)/(fc1.k-fc2.k); var y = fc1.k*x+fc1.t; return new Point(x, y); }; _root.createEmptyMovieClip("aaa", 1);//创建一个空mc用来放整个图形,这样容易把图的原点放到场景中心 aaa.createEmptyMovieClip("xzhou", 1); aaa.createEmptyMovieClip("yzhou", 2); with (aaa) {//画出坐标系,并把原点放到场景中间 xzhou.lineStyle(1, 0x000000, 100); yzhou.lineStyle(1, 0x000000, 100); xzhou.moveTo(-320, 0); xzhou.lineTo(320, 0); yzhou.moveTo(0, -240); yzhou.lineTo(0, 240); _x = 320; _y = 240; } aaa.huaxian = function(a, b) { this.sqx = new Shuangquxian(a, b); this.createEmptyMovieClip("ab", 3); with (this) {//下面就是画双曲线了,用了8段贝赛尔曲线,控制点就是双曲线对象的jd属性,端点就是dd属性 ab.lineStyle(1, 0xFF0000, 100); ab.moveTo(sqx.dd[0].x, sqx.dd[0].y); for (var k = 1; k<=3; k++) { ab.curveTo(sqx.jd[k].x, sqx.jd[k].y, sqx.dd[k].x, sqx.dd[k].y); } ab.moveTo(sqx.dd[0].x, sqx.dd[0].y); for (var k = 1; k<=3; k++) { ab.curveTo(sqx.jd[k].x, -sqx.jd[k].y, sqx.dd[k].x, -sqx.dd[k].y); } ab.moveTo(-sqx.dd[0].x, sqx.dd[0].y); for (var k = 1; k<=3; k++) { ab.curveTo(-sqx.jd[k].x, sqx.jd[k].y, -sqx.dd[k].x, sqx.dd[k].y); } ab.moveTo(-sqx.dd[0].x, sqx.dd[0].y); for (var k = 1; k<=3; k++) { ab.curveTo(-sqx.jd[k].x, -sqx.jd[k].y, -sqx.dd[k].x, -sqx.dd[k].y); } } }; //下面的代码用鼠标控制双曲线的a值和b值,这里设置的a=b onMouseDown = function () { _root.mousedown = true; }; onMouseMove = function () { if (mousedown) { aaa.huaxian(Math.abs(_xmouse-320), Math.abs(_xmouse-320)); updateAfterEvent(); } }; onMouseUp = function () { _root.mousedown = false; if (_ymouse<=250 && _ymouse>=230) { aaa.huaxian(Math.abs(_xmouse-320), Math.abs(_xmouse-320)); } };把代码放到第一帧就可以画双曲线了。 我觉得通过这个例子可以得出这样的结论:用curveTo画曲线关键是得出 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |
你可能对下面的文章感兴趣
上一篇: 《闪E》期刊2005年4月第9期正式发布下一篇: FLASH视频教学由浅入深
关于一个菜鸟是如何用curveTo画出双曲线的的所有评论