前段时间参加blueidea比赛的时候做的一个小东西,没什么创意,下面是代码

*
*  基于逃逸时间算法实现的mardebrot集合的缩放
  created bebee  qq176767677

*
**
*/
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.events.MouseEvent;
//定义初始窗口
var xmin:Number=-2.025;
var xmax:Number=0.6;
var ymin:Number=-1.125;
var ymax:Number=1.125;
//最大迭代次数
var iterations:int=128;
//默认窗口大小
var defaultWidth:Number=400;
var defaultHeight:Number=400;
//定义bitmap
var manderbrot:Bitmap;
//定义bitmapdata
var bmpData:BitmapData;
//鼠标是否按下
var _mouseDown:Boolean=false;
//绘制选择范围的sprite
var sp:Sprite;
//辅助变量,用于计算选择范围
var lastX:Number;
var lastY:Number

function initApp():void
{   
       //定义绘制图形的bitmapData对象
       bmpData=new BitmapData(defaultWidth,defaultHeight,false,0xff00ff)
       //定义bitmap对象
       manderbrot=new Bitmap(bmpData);
       //添加到显示列表
       this.addChild(manderbrot);
       //定义并添加一个sprite来设置背景颜色
       var sp1:Sprite=new Sprite();
       sp1.graphics.beginFill(0xff0000,0);
       sp1.graphics.drawRect(0,0,defaultWidth,defaultHeight);
       sp1.graphics.endFill();
       this.addChild(sp1);
       sp=new Sprite();
       addChild(sp);
       //setChildIndex(color,numChildren-1);
       setChildIndex(info,numChildren-1);
       //注册监视器监听鼠标事件
       this.addEventListener(MouseEvent.MOUSE_DOWN,mouseDown)
   this.addEventListener(MouseEvent.MOUSE_UP,mouseUp)
   this.addEventListener(MouseEvent.MOUSE_MOVE,mouseMove)
   this.addEventListener(MouseEvent.MOUSE_WHEEL,onMouseWheel)
       //绘制manderbrot集合
       drawManderbrot(defaultWidth,defaultHeight);
}
/* 绘制manderbrot集合
   w,h,为窗口的宽和高
*
*/

function drawManderbrot(w:int,h:int)
{var radioX:Number=(xmax-xmin)/w;//绘制窗口和初始窗口的x比率
    var radioY:Number=(ymax-ymin)/h;//绘制窗口和初始窗口的y比率

//临时变量,用于计算颜色值
       var th:Number=0;
       var tb:Number=0
       var c:int=0;
       //循环迭代窗口中的每一点
       for(var i:int=0;i<w;i++)
         for(var j:int=0;j<h;j++)
          {
                 var a:Number=xmin+i*radioX;//计算实部
                 var b:Number=ymin+j*radioY;//计算虚部
                 //if(!escapesToInfinity(a,b))
                  th=getescapecolor(a,b);//计算逃逸速度
                    tb=1-th*th
                        c=HSBtoRGB(th,1,tb);//映射逃逸速度为一整数颜色值
                 
               bmpData.setPixel(i,j,c)//用计算出的颜色值绘制该点
          }
}

function escapesToInfinity(a:Number,b:Number):Boolean
{
       var x:Number=0;
       var y:Number=0;
       var iteration:int=0;
       do
       {
              var xnew:Number=x*x-y*y+a;
              var ynew:Number=2*x*y+b;
              x=xnew;
              y=ynew;
              iteration++;
              if(iteration==iterations)return false
       }
       while(x<=2&&y<=2);
       return true;
}
/*
    计算逃逸速度 最大为1
    a,b为复数的实部和虚部
       
*/
function getescapecolor(a:Number,b:Number):Number
{
       var x:Number=0;
       var y:Number=0;
       var iteration:int=0;//迭代次数
       var r:Number=0;//半径
       while((iteration<iterations)&&(r<4.0))
       {
              var xnew:Number=x*x-y*y+a;
              var ynew:Number=2*x*y+b;
              x=xnew;
              y=ynew;
              r=xnew*xnew+ynew*ynew;//到原点距离的平方
              iteration++;//跌代次数加一
              
       }
       return iteration/iterations;
}
//鼠标按下,设置选取的起始位置,并记录它
function mouseDown(e:MouseEvent):void
{
       _mouseDown=true;
       sp.x=mouseX;
       sp.y=mouseY;
       lastX=mouseX;
       lastY=mouseY;
}
//鼠标滚轮的时候改变最大迭代次数
function onMouseWheel(e:MouseEvent):void
{
iterations+=e.delta;  
drawManderbrot(defaultWidth,defaultHeight)
}
//鼠标放开,计算新的窗口
function mouseUp(e:MouseEvent):void
{   
       _mouseDown=false;
       var radioX=(xmax-xmin)/width;
       var radioY=(ymax-ymin)/height;
    var w:Number=mouseX-lastX;
       var h:Number=mouseY-lastY;
    if(w==0||h==0)return       
       xmin=xmin+lastX*radioX
       ymin=ymin+lastY*radioY
       xmax=xmin+w*radioX;
       ymax=ymin+h*radioY;
       drawManderbrot(defaultWidth,defaultHeight);
       sp.graphics.clear();
}
//鼠标按下,并且移动的时候绘制选区
function mouseMove(e:MouseEvent):void
{  
       if(_mouseDown)
       {   sp.graphics.clear();
           sp.graphics.lineStyle(1,0xffffff,1);
              sp.graphics.drawRect(0,0,mouseX-sp.x,mouseY-sp.y);
       }
}
//color.addEventListener(ColorPickerEvent.CHANGE,colorChange)
/*function colorChange(e:ColorPickerEvent):void
{
        xmin=-2.025;
     xmax=0.6;
     ymin=-1.125;
     ymax=1.125;
        colors=color.selectedColor;
        drawManderbrot(400,400)
       
}*/
/*
hsb颜色转化为rgb颜色 算法参考了java类库的源代码
*/
function HSBtoRGB(hue:Number,saturation:Number,brightness:Number):int
{
var r:int=0,g:int=0,b:int=0;
if(saturation==0){
        r=g=b=int(brightness*255+0.5)
}else {
        var h:Number=(hue-Math.floor(hue))*6;
        var f:Number=h-Math.floor(h);
        var p:Number=brightness*(1-saturation);
        var q:Number=brightness*(1-saturation*f);
        var t:Number=brightness*(1-saturation*(1-f));
        switch(int(h)){
        case 0:
               r=int(brightness*255+0.5)
               g=int(t*255+0.5);
               b=int(p*255+0.5);
               break;
        case 1:
            r=int(q*255+0.5);
               g=int(brightness*255+0.5)
               b=int(p*255+0.5);
               break;
       case 2:
            r=int(p*255+0.5);
               g=int(brightness*255+0.5)
               b=int(t*255+0.5);
               break;
       case 3:

r=int(p*255+0.5);
               g=int(q*255+0.5)
               b=int(brightness*255+0.5);
               break;
       case 4:
            r=int(t*255+0.5);
               g=int(p*255+0.5)
               b=int(brightness*255+0.5);
               break;       
       case 5:
            r=int(brightness*255+0.5);
               g=int(p*255+0.5)
               b=int(q*255+0.5);
               break;
        }
}
return 0xff00000|(r<<16)|(g<<8)|b
}
initApp()

manderbrot集合flashi实现相关推荐

  1. do还是doing imagine加to_中学必背英语短语集合:54个doing动名词的固定搭配

    中学必背英语短语集合:54个doing动名词的固定搭配​mp.weixin.qq.com doing动名词是中小学英语教学中的重要内容.在小学的时候老师大概会把doing解释为一般进行时,但层级越往上 ...

  2. Redis 笔记(07)— sorted set 类型(添加、删除有序集合元素、获取分数范围内成员、按score排序、返回集合元素个数)

    zset 可能是 Redis 提供的最为特色的数据结构,一方面它是一个 set,保证了内部 value 的唯一性,另一方面它可以给每个 value 赋予一个 score,代表这个 value 的排序权 ...

  3. Redis 笔记(06)— set 类型(向集合添加元素、获取集合元素个数、判断集合中是否包含某个元素、删除给定元素、返回集合中所有元素、计算集合的交集、并集、差集)

    Redis 的 set 集合内部的键值对是无序的唯一的.它的内部实现相当于一个特殊的字典,字典中所有的 value 都是一个值 NULL .当集合中最后一个元素移除之后,数据结构自动删除,内存被回收. ...

  4. 【C#】集合_哈希表_字典_泛型_文件

    数组能做到:存放同种类型数据,且数据个数确定 object类型的数组能满足:放各种类型的数据,确定放多少个,但是随意插入元素,数组做不到 集合能做到:存放各种数据类型,且不确定存放多少个,能做到随意插 ...

  5. java集合中对象某属性比较排序

    TreeSet:它可以给Set集合中的元素进行指定方式的排序. 保证元素唯一性的方式:通过比较的结果是否为0. 底层数据结构是:二叉树. 排序的第一种方式: 让元素自身具备比较性.只要让元素实现Com ...

  6. 程序员应该吃透的集合List

    一:先看看集合框架接口图 (图片来源于网络) 从图中可以看到List实现了Collection接口. 二:Collection接口是什么? 在java类库中,Collection接口是集合类的基本接口 ...

  7. Java集合详解之Map

    一.首先看看集合框架体系图 从图中可以看到,Map接口扩展了Iterator接口,关于Iterator接口详解请移步:Iterator接口详解 二.Map是什么? Map<k,v>使用键值 ...

  8. 第一个python程序:定义,列表,元组,集合,求并集交集,键和值,运算符,缩进

    ''' 来源:天善智能韦玮老师课堂笔记 ''' print("定义") a = 6 # python里无需定义 print("a=",a) a += 1 # + ...

  9. python 获取集合里面的某一个元素

    python 获取集合里面的某一个元素,想想呢集合是不支持所以,切片,相加,相乘操作的, 所以想获取集合里面的某一个元素需要转化下思路,比如把即可转成列表然后在利用索引获取 例如: list_a = ...

最新文章

  1. php ajax session失效,PHP中解决ajax请求session过期退出登录问题
  2. CornerNet-Lite测试
  3. 【Java深入研究】2、JDK 1.8 LinkedList源码解析
  4. LoadRunner常遇见的问题
  5. 如何实现单链表交换任意两个元素(不包括头结点)
  6. 《深入理解 Spring Cloud 与微服务构建》第二章 微服务应该具备的功能
  7. struts2学习之基础笔记1
  8. 功夫小子实践开发-资源异步加载及过渡场景的分析和实现
  9. python 秘钥_python – 使用ssh密钥加密和解密密码
  10. 本地连接远程access数据库
  11. 基于vue+springboot餐厅选座点餐系统源码
  12. tlac100怎么添加ap_如何设置AC功能管理无线AP
  13. 造轮子,layuiAdmin——基于layui的后台管理模板
  14. matlab图像处理代码实例,MATLAB图像处理375例-程序代码
  15. 书法文化类毕业论文文献都有哪些?
  16. 走近棒球运动·芝加哥小熊队·MLB棒球创造营
  17. C++ —— (两个经纬度计算距离、方位角)、(经纬度A+距离+方位,计算目标经纬度)、(多个经纬度计算面积)
  18. 报错 - 使用marked报错 marked__WEBPACK_IMPORTED_MODULE_4___default(...) is not a function
  19. 花草茶之常用配方及功效说明
  20. 布雷顿森林体系的前因后果

热门文章

  1. 关于有道云笔记网页版的网页剪报功能的分析
  2. OC类和对象-对象和指针
  3. 点击网页上的手机号码直接拨打电话(针对手机端)
  4. android navigationbar监听,Android NavigationBar问题处理的方法
  5. 联华超市构建商业智能系统
  6. 攻防世界-CTF小白-WEB(新手)
  7. 七上八下猜数字_集体郊游在大巴车上搞活气氛的互动游戏
  8. 重启计算机 任务计划,使用任务计划程序在Windows中安排关机或重新启动 | MOS86...
  9. linux服务器关机后计划任务还能进行,宝塔面板计划任务定时安全重启Linux服务器实例操作...
  10. TIMEWAIT与CLOSEWAIT