Home > Flash | WEB > ベジェ曲線と、すごい単純な波の表現(2)

ベジェ曲線と、すごい単純な波の表現(2)

以前やったのを関数のベジェ曲線描画でやる。

参考にさせていただきました。
てっく煮ブログ - ベジエ曲線の仕組み (4) -ActionScript 3.0 でベジエ曲線を描く

参考
3次ベジェ曲線

Spriteを継承した、ベジェ曲線を描画するための
bezierTo 関数を持つクラスを作成して描画しました。

これを二つ並べて移動させることでナミナミさせてます。

bezierToは汎用的に使える予感です。

制御点 P0,P1,P2,P3として、
bezuerTo(P0.x,P0.y,P1.x,P1.y,P2.x,P2.y,P3.x,P3.y);

↓ ソース等


忙しく移動させてます。

二つ並べて移動させるだけのクラス

ACTIONSCRIPT:
  1. package {
  2.     import flash.display.Sprite;
  3.     import flash.events.Event;
  4.  
  5.     public class CurveTest extends Sprite
  6.     {
  7.         public var line:ThreeGBezier
  8.         public var line2:ThreeGBezier;
  9.        
  10.         public function CurveTest()
  11.         {
  12.             stage.scaleMode = "noScale";
  13.             stage.align = "TL";
  14.            
  15.             line = new ThreeGBezier;
  16.             line2 = new ThreeGBezier;
  17.             line.graphics.lineStyle(1,0x6481F5);
  18.             line.bezierTo(0,0,40,-40,160,40, 200,0);
  19.             line.y = 50;
  20.             line2.graphics.lineStyle(1,0x6481F5);
  21.             line2.bezierTo(0,0,40,-40,160,40,200,0);
  22.             line2.y = 50;
  23.             line2.x = 200;
  24.             this.addChild(line);
  25.             this.addChild(line2);
  26.            
  27.             this.addEventListener(Event.ENTER_FRAME, onEnterHandler);
  28.         }
  29.        
  30.         public function onEnterHandler(event:Event):void{
  31.             line.x -= 2;
  32.             line2.x -= 2;
  33.             if(line.x <= -200) line.x = 200;
  34.             if(line2.x <= -200) line2.x = 200;
  35.         }
  36.     }
  37. }

bezierToをもつクラス、こういう風にしておくと便利

ACTIONSCRIPT:
  1. package
  2. {
  3.     import flash.display.Sprite;
  4.     import flash.geom.Point;
  5.  
  6.     public class ThreeGBezier extends Sprite
  7.     {
  8.         private var p1:Point = new Point;
  9.         private var p2:Point = new Point;
  10.         private var p0:Point = new Point;
  11.         private var p3:Point = new Point;
  12.        
  13.         public function ThreeGBezier(){};   
  14.         public function bezierTo(p0x:Number, p0y:Number,p1x:Number, p1y:Number,p2x:Number, p2y:Number,p3x:Number, p3y:Number):void{
  15.             this.p0.x = p0x;
  16.             this.p0.y = p0y;
  17.             this.p1.x = p1x;
  18.             this.p1.y = p1y;
  19.             this.p2.x = p2x;
  20.             this.p2.y = p2y;
  21.             this.p3.x = p3x;
  22.             this.p3.y = p3y;
  23.            
  24.             var pt:Point, pt2:Point, pt3:Point;
  25.             var t:Number;
  26.             var diff:Number = 1.0 / 6;
  27.  
  28.             graphics.moveTo(p0.x, p0.y);
  29.             graphics.moveTo(p0.x, p0.y);       
  30.             graphics.moveTo(p0.x, p0.y);
  31.             for(t = 0.0; t <= 1.0; t += 0.01)
  32.             {
  33.                 pt = getBezierPoint(t);
  34.                 graphics.lineTo(pt.x, pt.y);
  35.             }
  36.              graphics.lineTo(p3.x, p3.y);
  37.         }
  38.  
  39.     // にとよんさんのソース
  40.         private function getBezierPoint(t:Number) :P oint
  41.         {
  42.             return new Point(Math.pow(1 - t, 3)  * p0.x + 3 * t * Math.pow(1 - t, 2) * p1.x
  43.                        + 3 * t * t * (1 - t) * p2.x + t * t * t * p3.x,
  44.                          Math.pow(1 - t, 3)  * p0.y + 3 * t * Math.pow(1 - t, 2) * p1.y
  45.                        + 3 * t * t * (1 - t) * p2.y + t * t * t * p3.y);
  46.         }
  47. }
  48. }

Comments:0

Comment Form
Remember personal info

Trackbacks:1

Trackback URL for this entry
http://parpue.net/web/347/trackback
Listed below are links to weblogs that reference
ベジェ曲線と、すごい単純な波の表現(2) from parpue.net
pingback from parpue.net - Flash,Degrafaで簡単に波を表現 (1) 09-04-15 (水) 3:02

[...] 前にかいたのと同じようなことを Degrafaを使用してやってみました。 [...]

Home > Flash | WEB > ベジェ曲線と、すごい単純な波の表現(2)

リンク
chocolataste-planner
millon

サーチ
Feeds
Meta
blog ranking ブログランキング・にほんブログ村へ
にほんブログ村 テクノラティのお気に入りに追加する

Return to page top