`

AS3 Flex的一个贝塞尔(Bezier)曲线图形实例

阅读更多

代码如下:

CurveDemo.as

 

package org.luosijin.curve  
{  
 import Flash.display.Sprite;  
 import flash.events.Event;  
 import flash.events.KeyboardEvent;  
 import flash.events.TimerEvent;  
 import flash.filters.GlowFilter;  
 import flash.geom.Point;  
 import flash.utils.Timer;  
   
 [SWF(width="730", height="300", backgroundColor="0x000000", frameRate="24")]   
 public class CurveDemo extends Sprite  
 {  
  private var _radius:int = 100;       //定义半径   
  private var _numPoints:Number = 30; //定义点数量   
  private var _points:Array = new Array();   
  private var _pre_r:Number = Math.PI * 0.0001;   
  private var _centX:Number = stage.stageWidth * 0.5;   
  private var _centY:Number = stage.stageHeight * 0.5;   
  private var _myTimer:Timer = new Timer(10, 0);   
  private var _color:Number = 0xACD8A4; //初始化颜色   
  private var _radians:Number = 0; //初始弧度值   
  private var _gf:GlowFilter = new GlowFilter();   
 
  public function CurveDemo()  
  {  
   _myTimer.addEventListener(TimerEvent.TIMER,onTimerHandler);  
   _myTimer.start();  
   //定义滤镜参数   
   _gf.blurX = _gf.blurY = 32;  
   _gf.color = 0xCBDAFF;  
   this.filters = [_gf];  
     
   stage.addEventListener(KeyboardEvent.KEY_DOWN,onKeyDown);  
  }  
  private function onTimerHandler(evt:Event):void 
  {  
   run();  
  }  
  private function run():void 
  {  
   graphics.clear();  
   _points = [];  
   _radians += _pre_r;  
     
   for(var i:int=1;i<_numPoints;i+=1)  
   {  
    var p:Point = new Point();  
    //重点部分正余弦作用   
    p.x = _centX + Math.cos(_radians*i)*i*5;  
    p.y = _centY + Math.sin(_radians*i)*i*5;  
    _points.push(p);  
   }  
   graphics.beginFill(_color,0.2);  
   graphics.lineStyle(1,_color,0.8);  
   graphics.moveTo(_centX,_centY);  
   for(i=2;i<_numPoints-2;i+=1)  
   {  
    graphics.curveTo(_points[i-1].x,_points[i-1].y,_points[i].x,_points[i].y);  
    graphics.curveTo(_points[i+1].x,_points[i+1].y,_centX,_centY);  
   }  
   graphics.endFill();  
  }  
  private function onKeyDown(evt:KeyboardEvent):void   
  {   
   switch (evt.keyCode)   
   {   
    case 97:   
     _color = 0x71CA65;   
     break;   
    case 98:   
     _color = -0xFF3300;   
     break;   
    case 99:   
     _color = 0xB5B0F3;   
     break;   
    case 100:   
     _color = 0xFA04C9;   
     break;   
    case 101:   
     _color = 0x62F6E5;   
     break;   
    case 102:   
     _color = 0xC07168;   
     break;   
    case 103:   
     _color = 0x75DE32;   
     break;   
    case 104:   
     _color = 0x32C1F0;   
     break;   
    case 105:   
     _color = 0x0285FF;   
     break;   
   }   
  }   
 }   
} 

 

 

CurveDemo.as2

package org.luosijin.curve      

{ 

 import flash.display.*;      

 import flash.events.*;      

 import flash.filters.*;      

 import flash.geom.*;      

 import flash.utils.*;      

 [SWF(width="730", height="500", backgroundColor="0x000000", frameRate="24")]      

 public class CurveDemo2 extends Sprite      

 {      

  private var _radius:int = 100;      

  private var _numPoints:Number = 30;      

  private var _points:Array;      

  private var _pre_r:Number = 0.000314159;      

  private var _centX:Number;      

  private var _centY:Number;      

  private var _myTimer:Timer;      

  private var _color:Number = 165375;      

  private var _radians:Number = 0;      

  private var _gf:GlowFilter;      

  public function CurveDemo2()      

  {      

   _points = new Array();      

   _centX =900* 0.5;      

   _centY =600* 0.5;      

   _myTimer = new Timer(10, 0);      

   _gf = new GlowFilter();      

   _myTimer.addEventListener(TimerEvent.TIMER,onTimerHandler);      

   _myTimer.start();      

   var _loc_1:int;      

   _gf.blurY = 32;      

   _gf.blurX = _loc_1;      

   _gf.color = 165375;      

   filters = [_gf];      

  }// end function      

  private function onTimerHandler(param1:Event) : void     

  {      

   run();      

  }// end function      

  private function run() : void     

  {      

   var _loc_2:Point;      

   graphics.clear();      

   _points = [];      

   _radians = _radians + _pre_r;      

   var _loc_1:Number=0;      

   while (_loc_1 < _numPoints)      

   {      

    // label      

    _loc_2 = new Point();      

    _loc_2.x = _centX + Math.cos(_radians * _loc_1) * 140;      

    _loc_2.y = _centY + Math.sin(_radians * _loc_1) * 140;      

    _points.push(_loc_2);      

    _loc_1 = _loc_1 + 1;      

   }// end while      

   graphics.beginFill(_color, 0.2);      

   graphics.lineStyle(1, _color, 0.8);      

   graphics.moveTo(_centX, _centY);      

   _loc_1 = 2;      

   while(_loc_1 < _numPoints-2){      

    graphics.curveTo(_points[_loc_1-1].x, _points[_loc_1-1].y, _points[_loc_1].x, _points[_loc_1].y);      

    graphics.curveTo(_points[_loc_1 + 1].x, _points[_loc_1 + 1].y, _centX, _centY);      

    _loc_1 = _loc_1 + 1;      

   }      

   graphics.endFill();      

  }// end function      

 }      

}

 

 

  • 大小: 6.1 KB
  • 大小: 5.6 KB
分享到:
评论

相关推荐

    手写opencv2实现贝塞尔bezier曲线

    手写opencv2实现贝塞尔bezier曲线 连续点击图片生成点 ,画出曲线

    C#带控制点的贝塞尔Bezier曲线算法(源码)

    在给定的代码中,`BezierSpline` 类提供了一个静态方法 `GetCurveControlPoints`,用于计算贝塞尔曲线的控制点。这个方法接受一个包含“节点”(或称“关键点”)的数组 `knots`,并分别输出第一控制点数组 `...

    Flex做的贝塞尔曲线

    总之,"Flex做的贝塞尔曲线"是一个关于如何使用ActionScript 3.0和Flex框架来实现平滑曲线图形的示例。通过学习和研究提供的AsTest文件,开发者不仅可以了解到贝塞尔曲线的基本原理,还能掌握在Flex中动态绘制和控制...

    三次Bezier曲线原理及实现代码

    本文介绍了Bezier曲线的基本原理,包括线性、二次和三次Bezier曲线的定义及其参数化表示方式,并给出了一个简单的C++实现示例。Bezier曲线因其平滑性和易于控制的特点,在图形设计和计算机图形学中具有广泛的应用。

    bezier曲线绘制Python代码-bezier曲线算法-贝塞尔曲线平滑-曲线拟合代码-曲线平滑算法-三次贝塞尔曲线

    这是一份python 版本的bezier曲线(贝塞尔曲线)绘制代码,实现了二次和三次bezier曲线的绘制,可用于一系列给定的离散点的曲线平滑。此代码封装成函数,可以直接调用。脚本里边有参数和代码的注释,可供使用者学习...

    实现动态绘制贝塞尔(bezier)曲线的代码.rar_VB 曲线 动态_VB 貝塞爾 代碼_vb 动态曲线_动态Bezier曲线

    总之,这个VB代码实例为学习者提供了一个实践贝塞尔曲线动态绘制的平台,有助于理解和应用这一重要的图形学概念。通过深入研究和修改代码,可以进一步扩展到其他图形操作,例如路径动画、物理模拟等。

    bezier曲线平滑C语言代码-贝塞尔曲线C语言实现-bezier曲线平滑-曲线拟合-贝塞尔曲线

    这是一份C语言版本的bezier曲线(贝塞尔曲线)绘制代码,实现了二次和三次bezier曲线的绘制,可用于一系列给定的离散点的曲线平滑。此代码封装成函数,可以直接调用。脚本里边有参数和代码的注释,可供使用者学习和...

    Bezier曲线代码 java

    标签中的"java Bezier曲线 代码"表明这个压缩包可能包含了一个名为"Bezier"的Java源代码文件,用于实现上述功能。在实际项目中,这样的代码可能用于游戏开发、2D/3D图形渲染或者UI设计等领域,帮助创建流畅的动画...

    python实现贝塞尔(Bezier)曲线画法

    在本教程中,我们将探讨如何利用Python和`wxpython`库来创建一个简单的贝塞尔曲线画图应用程序。 首先,我们需要了解贝塞尔曲线的基本概念。贝塞尔曲线由一系列控制点定义,分为线性、二次、三次以及更高次的贝塞尔...

    实验三:Bezier曲线.doc

    1962 年,法国数学家 Pierre Bézier 第一个研究了这种矢量绘制曲线的方法,并给出了详细的计算公式,因此按照这样的公式绘制出来的曲线就用他的姓氏来命名是为贝塞尔曲线。 实验代码: 在实验中,我们使用 C/C++ ...

    C#图形学-贝塞尔曲线

    贝塞尔曲线是计算机图形学中常用的一种...总的来说,"C#图形学-贝塞尔曲线"项目为学习和实践C#图形编程提供了一个很好的平台,通过理解贝塞尔曲线的原理和实现,可以提升在游戏开发、图形设计、UI交互等方面的能力。

    Bezier曲线(任意次数)程序实现(可用鼠标选点并拖动控制点实时改变Bezier曲线形状)

    总的来说,这个项目提供了学习和实践计算机图形学、特别是Bezier曲线和OpenGL交互式编程的一个良好机会。通过分析和研究代码,开发者可以加深对图形渲染、人机交互设计以及C++编程的理解,同时也能够提升在实际应用...

    Bezier曲线生成算法(C++实现)

    3. **递归公式**:根据递归公式实现一个函数来计算Bezier曲线上的任意点。对于n阶曲线,这个函数会接收参数t和一串控制点数组,然后调用自身两次,每次处理较低阶的子曲线,直到最终得到单点。 4. **插值计算**:...

    基于QT绘制可交互的Bezier曲线(仅供学习)

    在计算机图形学中,Bezier曲线是一种非常重要的数学工具,广泛应用于2D和3D图形...虽然目前只实现了简单的一级Bezier曲线,但进一步扩展到更复杂的Bezier曲线将是一个有价值的挑战,有助于提升你的编程和图形处理技能。

    计算机图形学实验Bezier曲线算法

    计算机图形学 实验 Bezier曲线算法

    自己用c++写的3阶贝塞尔曲线

    这个标题表明了一个个人项目,作者使用C++编程语言实现了一个3阶贝塞尔曲线的算法。3阶贝塞尔曲线是计算机图形学中的一种基本曲线,它由四个控制点定义,通常用于创建平滑的曲线路径。在图形设计、游戏开发和动画...

    C++ Bezier曲线拟合算法

    在C++中,我们可以创建一个类来表示Bezier曲线,包括计算Bernstein基函数、插值和绘制曲线等功能。类的成员变量可能包括控制点数组,阶数等。例如: ```cpp class BezierCurve { public: BezierCurve(int degree, ...

    OpenGL下通过鼠标动态绘制三次Bezier曲线

    三次 Bezier 曲线有四个控制节点,使用 OpenGL 的一维求值器原理可以实现曲线的绘制。 首先,我们需要了解 Bezier 曲线的数学原理。Bezier 曲线是一种参数曲线,使用参数 t 来定义曲线上的点。对于三次 Bezier 曲线...

    C++ 多控制点生成贝塞尔(Bezier-Curve)样条 C 语言版

    在给定的标题“C++ 多控制点生成贝塞尔(Bezier-Curve)样条 C 语言版”以及描述中,我们可以理解这是一个C++实现的程序,它能够基于多个控制点生成贝塞尔样条曲线。本文将深入探讨贝塞尔曲线的基本概念,多控制点的...

    vs2010 c++编写Bezier曲面 贝塞尔曲面

    贝塞尔曲线(Bezier Curve)是由法国工程师Pierre Bezier在1962年提出的,它是一种参数化的线性插值方法。贝塞尔曲线通过控制点来定义,其形状可以根据控制点的位置灵活调整。在三维空间中,多个二维贝塞尔曲线可以...

Global site tag (gtag.js) - Google Analytics