勾股树的画法

Python016

勾股树的画法,第1张

具体的制作步骤如下:

1、用旋转的方法画正方形ABCD

绘制出线段AB。双击点A,把点A标记为旋转中心。选中点B,选择“变换”—“旋转”命令,将点B旋转90度,得到点D。双击点D,把点D标记为旋转中心。选中点A,选择“变换”—“旋转”命令,将点A旋转-90度,得到点C,绘制出线段AD、DC、BC。

2、构造DC的中点E,并以点E为圆心,EC为半径构造圆

选中线段DC,选择“构造”—“中点”命令,绘制出DC的中点E。依次选中点E和点C,选择“构造”—“以圆心和圆周上点绘圆”命令。

3、构造圆弧CD,并在弧CD上取点F

选中点C、D和圆E,选择“构造”—“圆上的弧”命令。保持弧的选中状态,选择“构造”—“弧上的点”命令,任意绘制出点F。

4、构建勾股树动画按钮

选择点F,单击“编辑”—“操作类按钮”—“动画”,打开“操作类按钮动画点的属性”对话框,选择“动画”选项卡,将“方向”设为“双向”;“速度”设为“慢速”。再选择“标签”选项卡,在标签栏输入“勾股数动画按钮”,单击“确定”,把按钮的位置调整,如下图所示。

5、隐藏部分对象

隐藏圆E、圆弧CD、点E

6、度量出FD的长度,构造出正方形的内部

选择动点F和定点D,单击“度量”——“距离”,测出距离FD;选择点A、B、C、D,单击“构造”—“四边形内部”。

7、设置默认颜色参数

选择FD=1.51厘米、正方形内部,单击“显示”—“颜色”“参数”,打开颜色参数对话框,采用默认设置,单击“确定”按钮。

8、新建参数

单击“数据”菜单—“新建参数”,打开新建参数对话框,在“名称”框中输入“参数”,单击“确定”,新建一个“参数按钮”。如下图所示。

9、构建迭代

依次选择点B、A、“参数=1.00”按钮后,按住Shift键不放,单击“变换”—“深度迭代”,打开“迭代”对话框。在映像处依次单击点C、F,单击“结构”按钮,单击“添加新的映射”。在映像2处依次单击点F、D,单击“迭代”按钮,调整按钮位置。

10、绘制勾股树

选择“参数=1.00”按钮,按数字键盘上的数字按钮,将参数变到5,出现如下图所示图形。单击“勾股数动画按钮”就可以看到运动的勾股树。到此你已经完整的绘制出美丽的“勾股树”。

看到你这题目,百度了一下才知道“勾股树”是啥东西,挺有意思的,试着做了一个简单的~~~直接复制代码到空白项目的帧上就行了

import flash.display.Sprite

[SWF(width="800",height="800")]

//定义一个自动创建方块的函数

function createCube(x:Number = 0, y:Number = 0,width:Number = 0,height:Number = 0,clr = 0x):Sprite

{

var sp:Sprite = new Sprite()

sp.graphics.beginFill(clr,0.5)

sp.graphics.drawRect(-width/2,-height/2,width,height)

sp.graphics.endFill()

sp.x = x

sp.y = y

return sp

}

var firstNode:Sprite = createCube(stage.stageWidth/2,stage.stageHeight/2,100,100)//创建第一个方块

firstNode.y += 150

addChild(firstNode)

var node:int = 0//当前节点数目

var newNodeArr:Vector.<Sprite>= new Vector.<Sprite>()//记录每次新生成的方块的数组,并在这基础上新生出下一个节点的方块

var tempArr:Vector.<Sprite>//一个临时数组,每产生一个节点时就会清空一次,然后重新记录新节点里每一个新生成的方块,最后赋值给newNodeArr

newNodeArr.push(firstNode)

var nodeWith:Number = 100

var nodeHeight:Number = 100

while(node <10)//总共生成10个节点

{

nodeWith = nodeWith*Math.sin(Math.PI/4)

nodeHeight = nodeHeight*Math.sin(Math.PI/4)

node++

var clr:uint = 0x + 0x * node//每产生一个节点,色调都递增 0x个值(16进制)

tempArr = new Vector.<Sprite>()

for each (var nd:Sprite in newNodeArr)

{

var newNode1:Sprite = createCube(0,0,nodeWith,nodeHeight,clr)//生成左边的方块

var newNode2:Sprite = createCube(0,0,nodeWith,nodeHeight,clr)//生成右边的方块

nd.addChild(newNode1)

nd.addChild(newNode2)

newNode1.rotation = -45

newNode2.rotation = 45

newNode1.x = -newNode1.width / 2

newNode2.x = newNode2.width / 2

newNode1.y = -newNode1.height

newNode2.y = -newNode2.height

tempArr.push(newNode1)

tempArr.push(newNode2)

}

newNodeArr = tempArr

}

∵最大的正方形E的边长为5,

∴正方形E的面积=5 2 =25,

由勾股定理得,正方形A,B,C,D,E的面积和为S等于正方形E的面积,

∴S=25.