用FLASH做勾股树
2004-11-18 23:14
567 查看
半年前,同事说,他可以用几何画板做出“勾股树”,而用FLASA就不能做,我当时很有信心地说:只要用几何画板可以做的东西,用FLASH一定可以做。为此我费了好长时间没有做成,很有点惭愧,直到今天,我终于做成了,真是高兴。
源代码如下:
var a:Number=-1;
var w:Number=100;
var n:Number=4;
var i,j:Number;
var p:Array=new Array();
var t:Number=0;
for (i=0;i<n+1;i++)
{
p.push(new Array(2));
}
//trace(t);
var rgb1:Number=0xff0000;
var rgb2:Number=0x00ff00;
var rgb3:Number=0x0000ff;
p[1][1]=_root.createEmptyMovieClip("p11",1);
with(p[1][1])
{
beginFill(rgb1,100);
lineStyle(0,rgb1,100);
moveTo(0,0);
lineTo(w,0);
lineTo(w,-w);
lineTo(0,-w);
lineTo(0,0);
endFill();
}
p[1][1]._x=200;
p[1][1]._y=400;
p[1][1].w=p[1][1]._width;
onEnterFrame=function()
{
if(t==0||t==90)
{
a=-a;
}
t+=a;
for(i=1;i<n;i++)
{
for(j=1;j<Math.pow(2,(i-1))+1;j++)
{
drawmc(p,t,i,j);
}
}
}
//FUNCTION
function drawmc(q:Object,k:Number,ii:Number,jj:Number)
{
q[ii+1][2*jj-1]=q[ii][jj].createEmptyMovieClip("p"+((ii+1)*1000+(2*jj-1)),1);
q[ii+1][2*jj]=q[ii][jj].createEmptyMovieClip("p"+((ii+1)*1000+(2*jj)),2);
q[ii+1][2*jj-1].w=q[ii][jj].w*Math.cos(k*Math.PI/180);
q[ii+1][2*jj].w=q[ii][jj].w*Math.sin(k*Math.PI/180);
with(q[ii+1][2*jj-1])
{
beginFill(rgb2,100);
lineStyle(0,rgb1,100);
moveTo(0,0);
lineTo(q[ii+1][2*jj-1].w,0);
lineTo(q[ii+1][2*jj-1].w,-q[ii+1][2*jj-1].w);
lineTo(0,-q[ii+1][2*jj-1].w);
lineTo(0,0);
endFill();
}
with(q[ii+1][2*jj])
{
beginFill(rgb3,100);
lineStyle(0,rgb1,100);
moveTo(0,0);
lineTo(-q[ii+1][2*jj].w,0);
lineTo(-q[ii+1][2*jj].w,-q[ii+1][2*jj].w);
lineTo(0,-q[ii+1][2*jj].w);
lineTo(0,0);
endFill();
}
q[ii+1][2*jj-1]._rotation=-k;
q[ii+1][2*jj]._rotation=90-k;
if(Math.floor(jj/2)==jj/2)
{
q[ii+1][2*jj-1]._x=-q[ii][jj].w;
q[ii+1][2*jj-1]._y=-q[ii][jj].w;
q[ii+1][2*jj]._x=0;
q[ii+1][2*jj]._y=-q[ii][jj].w;
}
else
{
q[ii+1][2*jj-1]._x=0;
q[ii+1][2*jj-1]._y=-q[ii][jj].w;
q[ii+1][2*jj]._x=q[ii][jj].w;
q[ii+1][2*jj]._y=-q[ii][jj].w;
}
}
源代码如下:
var a:Number=-1;
var w:Number=100;
var n:Number=4;
var i,j:Number;
var p:Array=new Array();
var t:Number=0;
for (i=0;i<n+1;i++)
{
p.push(new Array(2));
}
//trace(t);
var rgb1:Number=0xff0000;
var rgb2:Number=0x00ff00;
var rgb3:Number=0x0000ff;
p[1][1]=_root.createEmptyMovieClip("p11",1);
with(p[1][1])
{
beginFill(rgb1,100);
lineStyle(0,rgb1,100);
moveTo(0,0);
lineTo(w,0);
lineTo(w,-w);
lineTo(0,-w);
lineTo(0,0);
endFill();
}
p[1][1]._x=200;
p[1][1]._y=400;
p[1][1].w=p[1][1]._width;
onEnterFrame=function()
{
if(t==0||t==90)
{
a=-a;
}
t+=a;
for(i=1;i<n;i++)
{
for(j=1;j<Math.pow(2,(i-1))+1;j++)
{
drawmc(p,t,i,j);
}
}
}
//FUNCTION
function drawmc(q:Object,k:Number,ii:Number,jj:Number)
{
q[ii+1][2*jj-1]=q[ii][jj].createEmptyMovieClip("p"+((ii+1)*1000+(2*jj-1)),1);
q[ii+1][2*jj]=q[ii][jj].createEmptyMovieClip("p"+((ii+1)*1000+(2*jj)),2);
q[ii+1][2*jj-1].w=q[ii][jj].w*Math.cos(k*Math.PI/180);
q[ii+1][2*jj].w=q[ii][jj].w*Math.sin(k*Math.PI/180);
with(q[ii+1][2*jj-1])
{
beginFill(rgb2,100);
lineStyle(0,rgb1,100);
moveTo(0,0);
lineTo(q[ii+1][2*jj-1].w,0);
lineTo(q[ii+1][2*jj-1].w,-q[ii+1][2*jj-1].w);
lineTo(0,-q[ii+1][2*jj-1].w);
lineTo(0,0);
endFill();
}
with(q[ii+1][2*jj])
{
beginFill(rgb3,100);
lineStyle(0,rgb1,100);
moveTo(0,0);
lineTo(-q[ii+1][2*jj].w,0);
lineTo(-q[ii+1][2*jj].w,-q[ii+1][2*jj].w);
lineTo(0,-q[ii+1][2*jj].w);
lineTo(0,0);
endFill();
}
q[ii+1][2*jj-1]._rotation=-k;
q[ii+1][2*jj]._rotation=90-k;
if(Math.floor(jj/2)==jj/2)
{
q[ii+1][2*jj-1]._x=-q[ii][jj].w;
q[ii+1][2*jj-1]._y=-q[ii][jj].w;
q[ii+1][2*jj]._x=0;
q[ii+1][2*jj]._y=-q[ii][jj].w;
}
else
{
q[ii+1][2*jj-1]._x=0;
q[ii+1][2*jj-1]._y=-q[ii][jj].w;
q[ii+1][2*jj]._x=q[ii][jj].w;
q[ii+1][2*jj]._y=-q[ii][jj].w;
}
}
相关文章推荐
- VC与Delphi之间动态链接库互相调用
- javascript表单之间的数据传递!
- PHP 的 MySQL 操作类,跟手册上的函数一样用,但是更方便了。多说无益,看了就知道了。
- 一个非常不错的业务规则管理器
- delphi中的时间操作技术(1)
- delphi中的时间操作技术(2)
- VB五子棋问题,请高手赐教
- IP地址的隐藏(delphi实现 )
- 解析IP地址为主机域名
- 将某一主机域名解析为IP地址
- 有关TrueDBGrid的问题向各位大虾请教
- 用VB和MTS开发多层数据库应用系统
- 看到一篇好文章与大家分享!!!!!
- 纯编码实现数据库的建立或压缩
- 从数据库中动态选取下拉列表的方法
- 如何在VB例程中接收自定义消息
- 初学者的问题----csdn系列
- [转贴]Phrack 最新公开的Win32用户态rootkit技术
- creating a Self Deleting Executable
- Phrack最新公布的内核态RootKit的技术细节(e文)