快速业务通道

一个菜鸟是如何用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 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号