flash特效原理 标签云

分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow

也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

               

 

 

   其实标签云是一个比较常见的特效类,在wondefl里面已经被做烂了,经典之余,涉及到知识点,是基于球体和旋转方面的数学应用,在这方面而言,标签云的制作并不是十分难,多少会有很多的意思,不妨尝试制作一下。这个程序已经是上一年写的,多少被丢到哪里去没有理了。今天写在这里,表示记录一下。

 

换了几种颜色,绿色,橙色,蓝色 ,效果会好看一点。只是通过位图的方式多少有点锯齿在里面。

 

 

 

简单测试:

[c-sharp] view plain copy print ?
  1. import org.summerTree.effect.TagCloud;  
  2. import org.summerTree.effect.TagText;  
  3. import flash.text.TextFormat;  
  4. import org.summerTree.effect.IEffect;  
  5.   
  6. var tagArray:Array = ["Flash","Flex","AIR","JAVA","DePHI","JAVAScript","OPENGL","网易","百度","搜狐","雅虎","谷歌","苹果","微软","甲骨文","Sun","adobe","盛大","腾讯","JAVAScript","OPENGL"];  
  7.   
  8. var tagColor:Array = [0xff0000,0xFF8000,0xFFFF00,0x99CC99,0x00FFFF,0xFF00FF,0xff0000,0xFF8000,0xFFFF00,0x99CC99,0x00FFFF,0xFF00FF,0xff0000,0xFF8000,0xFFFF00,0x99CC99,0x00FFFF,0xFF00FF,0x99CC99,0x00FFFF,0xFF00FF];  
  9.   
  10. var tagUrls:Array = ["http://www.baidu.com","http://www.baidu.com","http://www.baidu.com","http://www.baidu.com","http://www.baidu.com","http://www.baidu.com","http://www.baidu.com","http://www.baidu.com","http://www.baidu.com","http://www.baidu.com","http://www.baidu.com","http://www.baidu.com","http://www.baidu.com","http://www.baidu.com","http://www.baidu.com","http://www.baidu.com","http://www.baidu.com","http://www.baidu.com","http://www.baidu.com","http://www.baidu.com","http://www.baidu.com"];  
  11.   
  12. var tags:TagCloud=new TagCloud();//创建标签云  
  13. tags.x = 250;  
  14. tags.y = 200;  
  15. addChild(tags);  
  16. var effect:IEffect = new TagText(tagArray,tagUrls,tagColor,new TextFormat("Arial",20,0));  
  17.   
  18. tags.appendTag(effect);  
import org.summerTree.effect.TagCloud;import org.summerTree.effect.TagText;import flash.text.TextFormat;import org.summerTree.effect.IEffect;var tagArray:Array = ["Flash","Flex","AIR","JAVA","DePHI","JAVAScript","OPENGL","网易","百度","搜狐","雅虎","谷歌","苹果","微软","甲骨文","Sun","adobe","盛大","腾讯","JAVAScript","OPENGL"];var tagColor:Array = [0xff0000,0xFF8000,0xFFFF00,0x99CC99,0x00FFFF,0xFF00FF,0xff0000,0xFF8000,0xFFFF00,0x99CC99,0x00FFFF,0xFF00FF,0xff0000,0xFF8000,0xFFFF00,0x99CC99,0x00FFFF,0xFF00FF,0x99CC99,0x00FFFF,0xFF00FF];var tagUrls:Array = ["http://www.baidu.com","http://www.baidu.com","http://www.baidu.com","http://www.baidu.com","http://www.baidu.com","http://www.baidu.com","http://www.baidu.com","http://www.baidu.com","http://www.baidu.com","http://www.baidu.com","http://www.baidu.com","http://www.baidu.com","http://www.baidu.com","http://www.baidu.com","http://www.baidu.com","http://www.baidu.com","http://www.baidu.com","http://www.baidu.com","http://www.baidu.com","http://www.baidu.com","http://www.baidu.com"];var tags:TagCloud=new TagCloud();//创建标签云tags.x = 250;tags.y = 200;addChild(tags);var effect:IEffect = new TagText(tagArray,tagUrls,tagColor,new TextFormat("Arial",20,0));tags.appendTag(effect);

 

 

如果颜色不好看,可以看看这个。换取不同的颜色,效果会有不错的显色。常见使用的红橙黄绿蓝锭紫 这几种颜色搭配效果很好看。

 

[c-sharp] view plain copy print ?
  1. var tagColor:Array = [0xffffff,0xffffff,0xFF8000,0xffffff,0xffffff,0x80FF00,0xffffff,0xffffff,0xffffff,0xFF00FF,0xffffff,0xffffff,0xFF8000,0xffffff,0xFFFF00,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0x00E3E3];  
var tagColor:Array = [0xffffff,0xffffff,0xFF8000,0xffffff,0xffffff,0x80FF00,0xffffff,0xffffff,0xffffff,0xFF00FF,0xffffff,0xffffff,0xFF8000,0xffffff,0xFFFF00,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0x00E3E3];

 

粒子模型。一个很实用的模型构建,用于对文本的坐标记录。可以把文本当成一个点。

 

[c-sharp] view plain copy print ?
  1. //该类为粒子模型  
  2. //常用的粒子模型工具  
  3.   
  4. package org.summerTree.effect  
  5. {  
  6.   
  7.     public class Particle  
  8.     {  
  9.         public var x:Number;//x 位置  
  10.         public var y:Number;//y 位置  
  11.         public var z:Number;//z 位置  
  12.         public function Particle()  
  13.         {  
  14.   
  15.         }  
  16.        
  17.     }  
  18. }  
//该类为粒子模型//常用的粒子模型工具package org.summerTree.effect{ public class Particle {  public var x:Number;//x 位置  public var y:Number;//y 位置  public var z:Number;//z 位置  public function Particle()  {  }      }}

 

对应的接口:

获取返回一组标签数字。

[c-sharp] view plain copy print ?
  1. package org.summerTree.effect  
  2. {  
  3.     public interface IEffect  
  4.     {         
  5.         function makeEffect():void;  
  6.         function getArray():Array;  
  7.     }  
  8.       
  9. }  
package org.summerTree.effect{ public interface IEffect {    function makeEffect():void;  function getArray():Array; } }

 

 在制作标签云的时候,多少需要动用一些有用球体公式,这些公式非常有用,我们需要这种球体分布把我们相应的文本设置到相应的位置上去,同时为了让这些点能够旋转起来,多少还需要用到球体旋转公式。在kp作者书里面已经有相应的提交。不妨可以找回make thing move这本书看看。

 

使用这两种旋转 让文本旋转起来。

 

private function roteY(p:Particle,angle:Number):void

private function roteX(p:Particle,angle:Number):void

 

注意:

当中比较核心一点就是懂球体的坐标公式,这个坐标公式可以帮到你进行运算

x = radius * Math.cos(theta) * Math.sin(phi);
y = radius * Math.sin(theta) * Math.sin(phi);

z = radius * Math.cos(phi);

 

推导的过程可以参考大学的解析几何相关书。

很多球体相关应用在wonderfl 里面已经大为使用过,我相信借用wonderfl 强大的平台 可以让我们掌握更多flash 的信息和制作技巧。前提下,你需要拿起高中的数学书 多读几回合,尽管你的潜意识已经有反感,说不定你 会发现那些宝物就藏在哪里。

 

核心的技术在于,对球体坐标公式相关应用:

 

 

 

 

[c-sharp] view plain copy print ?
  1. //TagCloud.as 标签云  
  2. //author 夏天的树人  
  3.   
  4. package org.summerTree.effect  
  5. {  
  6.     import flash.display.Sprite;  
  7.     import flash.display.DisplayObject;  
  8.     import flash.display.BitmapData;  
  9.     import flash.events.Event;  
  10.     import flash.text.TextField;  
  11.     import flash.filters.GlowFilter;  
  12.     import flash.filters.BlurFilter;  
  13.     import flash.filters.BitmapFilterQuality;  
  14.     import flash.text.TextFormat;  
  15.     import flash.geom.Point;  
  16.   
  17.     public class TagCloud extends Sprite  
  18.     {  
  19.         private var tagContainer:Sprite=new Sprite();//标签容器  
  20.         public var _speed:Number = 0.008;//速度  
  21.         private var tags:Array;            //标签数组  
  22.         private var tag_len:int;          //标签数组长度  
  23.         private var fl:Number = 250;     //焦距  
  24.         private var p_list:Array = [];  // 粒子列表  
  25.         private var radius:Number=0;   //半径  
  26.         public function TagCloud()  
  27.         {  
  28.             addChild(tagContainer);  
  29.         }  
  30.            
  31.         //添加标签   
  32.         public function appendTag(effectObject:IEffect,radius:Number=140):void  
  33.         {  
  34.             addChild(DisplayObject(effectObject));  
  35.             effectObject.makeEffect();  
  36.             tags = effectObject.getArray();  
  37.             tag_len = tags.length;  
  38.             this.radius=radius;  
  39.   
  40.             for (var i:int=0; i<tag_len; i++)  
  41.             {  
  42.                 tagContainer.addChild(tags[i]);  
  43.                 var p:Particle=new Particle();  
  44.                   
  45.                 //球体uv分布,经纬度  
  46.                 var phi:Number = Math.acos((2 * (i + 1) - 1) / tag_len - 1);                  
  47.                 var theta:Number = Math.sqrt(tag_len * Math.PI) * phi;  
  48.                    
  49.                 p.x = radius * Math.cos(theta) * Math.sin(phi);  
  50.                 p.y = radius * Math.sin(theta) * Math.sin(phi);  
  51.                 p.z = radius * Math.cos(phi);  
  52.                 p_list.push(p);  
  53.             }  
  54.             init_motion();  
  55.         }  
  56.   
  57.         private function init_motion():void  
  58.         {  
  59.             addEventListener(Event.ENTER_FRAME,Run);  
  60.         }  
  61.   
  62.         //开始旋转运动  
  63.         public function startMotion():void  
  64.         {  
  65.             addEventListener(Event.ENTER_FRAME,Run);  
  66.         }  
  67.   
  68.         //结束旋转  
  69.         public function stopMotion():void  
  70.         {  
  71.             removeEventListener(Event.ENTER_FRAME,Run);  
  72.         }  
  73.   
  74.         public function set speed(value:Number):void  
  75.         {  
  76.             _speed = value;  
  77.         }  
  78.   
  79.         public function get speed():Number  
  80.         {  
  81.             return _speed;  
  82.         }  
  83.   
  84.         //对容器进行鼠标交互  
  85.         private function Run(event:Event):void  
  86.         {  
  87.             var angleY:Number=(stage.mouseX - stage.width * 0.5) * this.speed;   
  88.             var angleX:Number=(stage.mouseY - stage.height * 0.5) * this.speed;   
  89.             for (var i:int=0;i<tag_len;i++)  
  90.             {  
  91.                 roteY(p_list[i],angleY);  
  92.                 roteX(p_list[i],angleX);  
  93.                 var scale:Number = fl / ( fl + p_list[i].z );  
  94.                 tags[i].scaleX = tags[i].scaleY = scale;  
  95.                 tags[i].x = p_list[i].x * scale;  
  96.                 tags[i].y = p_list[i].y * scale;  
  97.                 tags[i].alpha=scale;  
  98.             }  
  99.               
  100.             // sortZ();  
  101.         }  
  102.   
  103.           
  104.         //利用坐标旋转x  
  105.         private function roteX(p:Particle,angle:Number):void  
  106.         {  
  107.             angle=angle*Math.PI/180;  
  108.             var py:Number = Math.cos(angle) * p.y - Math.sin(angle) * p.z;  
  109.             var pz:Number = Math.cos(angle) * p.z + Math.sin(angle) * p.y;  
  110.             p.y = py;  
  111.             p.z = pz;  
  112.         }  
  113.         //利用坐标旋转y  
  114.         private function roteY(p:Particle,angle:Number):void  
  115.         {  
  116.             angle=angle*Math.PI/180;  
  117.             var px:Number = Math.cos(angle) * p.x - Math.sin(angle) * p.z;  
  118.             var pz:Number = Math.cos(angle) * p.z + Math.sin(angle) * p.x;  
  119.             p.x = px;  
  120.             p.z = pz;  
  121.         }  
  122.   
  123.         //Z的深度排序  
  124.         private function sortZ():void  
  125.         {  
  126.             p_list.sortOn("z",Array.DESCENDING|Array.NUMERIC);//排序  
  127.             for (var i:int=0; i<tag_len; i++)  
  128.             {  
  129.                 var p:* = tags[i];  
  130.                 tagContainer.setChildIndex(p,i);  
  131.             }  
  132.         }  
  133.   
  134.     }  
  135. }  
//TagCloud.as 标签云//author 夏天的树人package org.summerTree.effect{ import flash.display.Sprite; import flash.display.DisplayObject; import flash.display.BitmapData; import flash.events.Event; import flash.text.TextField; import flash.filters.GlowFilter; import flash.filters.BlurFilter; import flash.filters.BitmapFilterQuality; import flash.text.TextFormat; import flash.geom.Point; public class TagCloud extends Sprite {  private var tagContainer:Sprite=new Sprite();//标签容器  public var _speed:Number = 0.008;//速度  private var tags:Array;            //标签数组  private var tag_len:int;          //标签数组长度  private var fl:Number = 250;     //焦距  private var p_list:Array = [];  // 粒子列表  private var radius:Number=0;   //半径  public function TagCloud()  {   addChild(tagContainer);  }           //添加标签   public function appendTag(effectObject:IEffect,radius:Number=140):void  {   addChild(DisplayObject(effectObject));   effectObject.makeEffect();   tags = effectObject.getArray();   tag_len = tags.length;   this.radius=radius;   for (var i:int=0; i<tag_len; i++)   {    tagContainer.addChild(tags[i]);    var p:Particle=new Particle();        //球体uv分布,经纬度    var phi:Number = Math.acos((2 * (i + 1) - 1) / tag_len - 1);        var theta:Number = Math.sqrt(tag_len * Math.PI) * phi;         p.x = radius * Math.cos(theta) * Math.sin(phi);    p.y = radius * Math.sin(theta) * Math.sin(phi);    p.z = radius * Math.cos(phi);    p_list.push(p);   }   init_motion();  }  private function init_motion():void  {   addEventListener(Event.ENTER_FRAME,Run);  }  //开始旋转运动  public function startMotion():void  {   addEventListener(Event.ENTER_FRAME,Run);  }  //结束旋转  public function stopMotion():void  {   removeEventListener(Event.ENTER_FRAME,Run);  }  public function set speed(value:Number):void  {   _speed = value;  }  public function get speed():Number  {   return _speed;  }  //对容器进行鼠标交互  private function Run(event:Event):void  {   var angleY:Number=(stage.mouseX - stage.width * 0.5) * this.speed;    var angleX:Number=(stage.mouseY - stage.height * 0.5) * this.speed;    for (var i:int=0;i<tag_len;i++)   {    roteY(p_list[i],angleY);    roteX(p_list[i],angleX);    var scale:Number = fl / ( fl + p_list[i].z );    tags[i].scaleX = tags[i].scaleY = scale;    tags[i].x = p_list[i].x * scale;    tags[i].y = p_list[i].y * scale;    tags[i].alpha=scale;   }      // sortZ();  }    //利用坐标旋转x  private function roteX(p:Particle,angle:Number):void  {   angle=angle*Math.PI/180;   var py:Number = Math.cos(angle) * p.y - Math.sin(angle) * p.z;   var pz:Number = Math.cos(angle) * p.z + Math.sin(angle) * p.y;   p.y = py;   p.z = pz;  }  //利用坐标旋转y  private function roteY(p:Particle,angle:Number):void  {   angle=angle*Math.PI/180;   var px:Number = Math.cos(angle) * p.x - Math.sin(angle) * p.z;   var pz:Number = Math.cos(angle) * p.z + Math.sin(angle) * p.x;   p.x = px;   p.z = pz;  }  //Z的深度排序  private function sortZ():void  {   p_list.sortOn("z",Array.DESCENDING|Array.NUMERIC);//排序   for (var i:int=0; i<tag_len; i++)   {    var p:* = tags[i];    tagContainer.setChildIndex(p,i);   }  } }}

 

 

[c-sharp] view plain copy print ?
  1. //文本,用于标签文本  
  2. package org.summerTree.effect  
  3. {  
  4.     import flash.display.Sprite;  
  5.     import flash.display.BitmapData;  
  6.     import flash.display.Bitmap;  
  7.     import flash.events.Event;  
  8.     import flash.text.TextField;  
  9.     import flash.filters.GlowFilter;  
  10.     import flash.filters.BlurFilter;  
  11.     import flash.filters.BitmapFilterQuality;  
  12.     import flash.text.TextFormat;  
  13.     import flash.events.MouseEvent;  
  14.     import flash.net.navigateToURL;  
  15.     import flash.net.URLRequest;  
  16.     import flash.display.Shape;  
  17.       
  18.       
  19.     public class TagText extends Sprite  implements IEffect  
  20.     {         
  21.         private var tag_List:Array;//标签列表  
  22.         private var tag_len:int;//标签数组的长度  
  23.           
  24.         private var textFormat:TextFormat;//文本格式  
  25.         private var glow:GlowFilter;      //发光效果  
  26.         private var contain_list:Array=[]; //标签内容  
  27.         private var urls:Array=[];//连接地址  
  28.         private var colors:Array;  
  29.         public function TagText(tag_List:Array,urls:Array,colors:Array,textFormat:TextFormat=null,glowColor:uint=0x00ff00)  
  30.         {  
  31.             glow = new GlowFilter (glowColor, 1, 8, 8, 2, BitmapFilterQuality.LOW, truefalse);  
  32.               
  33.             this.tag_List = tag_List;  
  34.             this.textFormat = textFormat;  
  35.             this.tag_len = tag_List.length;  
  36.             this.colors=colors;  
  37.             this.urls=urls;  
  38.         }  
  39.           
  40.         //创建标签指定他们的文本和滤镜方式  
  41.         private function buildTags():void  
  42.         {  
  43.             for (var i:int=0; i < tag_len; i++)  
  44.             {  
  45.                 var txt:TextField=new TextField();  
  46.                   
  47.                 if (textFormat != null)  
  48.                 {  
  49.                     txt.defaultTextFormat = textFormat;  
  50.                 }  
  51.                 txt.selectable = false;  
  52.                 txt.textColor=colors[i];  
  53.                 txt.text = tag_List[i];  
  54.                   
  55.                 txt.filters = [new BlurFilter(1.1,1.1)];  
  56.                 var txtW:Number = txt.textWidth + 4;  
  57.                 var txtH:Number = txt.textHeight + 4;  
  58.                 var bitmapdata:BitmapData = new BitmapData(txtW,txtH,true,0x01FFFFFF);  
  59.                 bitmapdata.draw(txt);  
  60.   
  61.                 var contain:containEx=new containEx();  
  62.                 contain.url=urls[i];  
  63.                 addChild(contain);  
  64.                   
  65.                 var bmp:Bitmap = new  Bitmap(bitmapdata);  
  66.                 var rect:Shape=new Shape();  
  67.                 contain.addChild(rect);  
  68.                 contain.addChild(bmp);  
  69.                   
  70.                   
  71.                 contain_list.push(contain);  
  72.                 contain.addEventListener(MouseEvent.ROLL_OVER,onOverHandler);  
  73.                 contain.addEventListener(MouseEvent.ROLL_OUT,onOutHandler);  
  74.                 contain.addEventListener(MouseEvent.CLICK,onClickHandler);  
  75.             }  
  76.         }  
  77.         private function onOverHandler(event:MouseEvent):void  
  78.         {  
  79.              event.currentTarget.buttonMode=true;  
  80.              event.currentTarget.filters = [glow];  
  81.              event.currentTarget.getChildAt(0).graphics.clear();  
  82.              event.currentTarget.getChildAt(0).graphics.lineStyle(0,0xff0000);  
  83.              event.currentTarget.getChildAt(0).graphics.drawRect(0,0, event.currentTarget.getChildAt(1).width, event.currentTarget.getChildAt(1).height);  
  84.         }  
  85.           
  86.         private function onOutHandler(event:MouseEvent):void  
  87.         {  
  88.              event.currentTarget.buttonMode=false;  
  89.              event.currentTarget.filters = [];  
  90.               event.currentTarget.getChildAt(0).graphics.clear();  
  91.         }         
  92.           
  93.         private function onClickHandler(event:MouseEvent):void  
  94.         {  
  95.             navigateToURL(new URLRequest(event.currentTarget.url));       
  96.         }  
  97.                   
  98.         public function makeEffect():void  
  99.         {             
  100.             buildTags();  
  101.         }         
  102.         public  function getArray():Array  
  103.         {  
  104.             return contain_list;              
  105.         }         
  106.     }     
  107. }  
  108.   
  109. import flash.display.Sprite;  
  110. internal class containEx extends Sprite  
  111. {  
  112.      public var url:String;  
  113.      public function containEx()  
  114.      {  
  115.            
  116.      }  
  117. }  
//文本,用于标签文本package org.summerTree.effect{ import flash.display.Sprite; import flash.display.BitmapData; import flash.display.Bitmap; import flash.events.Event; import flash.text.TextField; import flash.filters.GlowFilter; import flash.filters.BlurFilter; import flash.filters.BitmapFilterQuality; import flash.text.TextFormat; import flash.events.MouseEvent; import flash.net.navigateToURL; import flash.net.URLRequest; import flash.display.Shape;   public class TagText extends Sprite  implements IEffect {    private var tag_List:Array;//标签列表  private var tag_len:int;//标签数组的长度    private var textFormat:TextFormat;//文本格式  private var glow:GlowFilter;      //发光效果  private var contain_list:Array=[]; //标签内容  private var urls:Array=[];//连接地址  private var colors:Array;  public function TagText(tag_List:Array,urls:Array,colors:Array,textFormat:TextFormat=null,glowColor:uint=0x00ff00)  {   glow = new GlowFilter (glowColor, 1, 8, 8, 2, BitmapFilterQuality.LOW, true, false);      this.tag_List = tag_List;   this.textFormat = textFormat;   this.tag_len = tag_List.length;   this.colors=colors;   this.urls=urls;  }    //创建标签指定他们的文本和滤镜方式  private function buildTags():void  {   for (var i:int=0; i < tag_len; i++)   {    var txt:TextField=new TextField();        if (textFormat != null)    {     txt.defaultTextFormat = textFormat;    }    txt.selectable = false;    txt.textColor=colors[i];    txt.text = tag_List[i];        txt.filters = [new BlurFilter(1.1,1.1)];    var txtW:Number = txt.textWidth + 4;    var txtH:Number = txt.textHeight + 4;    var bitmapdata:BitmapData = new BitmapData(txtW,txtH,true,0x01FFFFFF);    bitmapdata.draw(txt);                var contain:containEx=new containEx();    contain.url=urls[i];    addChild(contain);        var bmp:Bitmap = new  Bitmap(bitmapdata);    var rect:Shape=new Shape();    contain.addChild(rect);    contain.addChild(bmp);            contain_list.push(contain);    contain.addEventListener(MouseEvent.ROLL_OVER,onOverHandler);    contain.addEventListener(MouseEvent.ROLL_OUT,onOutHandler);    contain.addEventListener(MouseEvent.CLICK,onClickHandler);   }  }  private function onOverHandler(event:MouseEvent):void  {    event.currentTarget.buttonMode=true;    event.currentTarget.filters = [glow];    event.currentTarget.getChildAt(0).graphics.clear();    event.currentTarget.getChildAt(0).graphics.lineStyle(0,0xff0000);    event.currentTarget.getChildAt(0).graphics.drawRect(0,0, event.currentTarget.getChildAt(1).width, event.currentTarget.getChildAt(1).height);  }    private function onOutHandler(event:MouseEvent):void  {    event.currentTarget.buttonMode=false;    event.currentTarget.filters = [];     event.currentTarget.getChildAt(0).graphics.clear();  }      private function onClickHandler(event:MouseEvent):void  {   navigateToURL(new URLRequest(event.currentTarget.url));    }      public function makeEffect():void  {      buildTags();  }    public  function getArray():Array  {   return contain_list;     }   } }import flash.display.Sprite;internal class containEx extends Sprite{  public var url:String;  public function containEx()  {     }}

 

如果不喜欢 TagText类,那么可以重写一个,可以实现接口IEffect,把对应标签文字添加到数组里面可以借用TagCloud 来尝试制作。

TagCloud 只是一个特效容器,而至于其他文本 可以根据自己喜欢,调整自己喜欢的颜色和链接,或者使用一个xml数据来绑定你想要的标签云效果。

 

制作方式很多 多种多样,它看起来并不是很炫耀,经典还是很值得去阅读。相信你可以做出更加优秀的标签云。或者留下你的名字,把你的想法告诉我。

 

 

好,睡觉了。功课记录完毕。

 

           

给我老师的人工智能教程打call!http://blog.csdn.net/jiangjunshow
这里写图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值