Posts tagged as ActionScript

[AS]曲線の公式を描画するライブラリ

Spark project 勉強会#6でお話した「曲線の公式を使って図形を描いたりするライブラリ」について。

 

各曲線の数学的公式を1つ1つのクラスとして用意し、ごそごそ座標計算をするライブラリです。

Spark project/CurveLib
http://www.libspark.org/wiki/e_s_jp/CurveLib

 

ICurveFormulaインタフェースを実装した曲線の公式定義クラスと、その公式定義をいろいろ計算するCurvePointクラスがいらっしゃいます。
それだけでは、見た目に楽しくないので CurveGraphicsクラスというgraphics.lineTo()して曲線を描画するクラスもあったりします。

 

CurveLibを使ってどんな曲線が描けて、また公式定義クラスの引数確認用にサンプルサイトを作ったので見てみてください。

CurveLib
http://violentcoding.com/content/curvelib/

上記のCurveLibサイトと同じものSWF置き場(ローカルFlashPlayerの方が描画が早いのでこちらをおすすめ)
http://www.libspark.org/svn/as3/CurveLib/trunk/doc/fp9/formulaSWF/

curvelib01.png

 


それでは、CurveLib概要。

CurvePointクラス

  • 曲線の公式を使った計算
  • 半径を1.0として計算

ICurveFormulaインタフェース

  • 曲線公式の定義
  • 半径を1.0として定義

今用意している曲線は以下のようなものです。

  1. Botanic Curve
  2. Rhodonea(バラ曲線)
  3. Epitrochoid(外トロコイド)
  4. Hypotrochoid(内トロコイド)
  5. Starr Rose

※半径を1.0で計算し、また始点から終点への周回数計算が楽なため公式定義の引数に分母と分子を設定するとか数学的公式とは違ってクセがあります。

 

クラス図としては以下になります。一応公式クラスを追加しても、まぁ良い感じになるように学習してみました。

curveLib.gif
// 参考コード

// CurveGraphicsの抽象的クラス
var curve : CurveGraphicsBase;

// 公式の計算をするCurvePointクラスを用意
var curvePoint : CurvePoint = new CurvePoint( new BotanicCurveFormula( 5, 4, 1, 5 ) );

// 半径200でCurveGraphicsクラスを用意
curve = new CurveGraphics( 200, curvePoint );

// 計算系の設定
curve.stepSize = 1 ;
curve.startAngle = 0;
curve.isClockWise = !true;
curve.isLoop = !true;

// 配置座標(曲線の中心が0,0)
curve.x = 250;
curve.y = 250;
addChild( curve );

// 描画の線設定
curve.lineStyle( 0, 0x000000 );

// 描画の塗り設定
curve.beginFill( 0xFF0000, 0.25 );

// 曲線の描画
curve.lineCurve( true );

 


CurveLibの主要となるのはCurvePointクラス。

CurvePointクラスのメソッドとしては、

  • 指定角度でのXY座標を取得:getAnglePoint( angle )
  • 曲線上の計算する点の数を取得:getPointCount()
  • タイマー計算:startCurvePoint( delay, isClose )
  • タイマー計算の制御:startTick()・stopTick()・resetTick()
  • タイマー計算時イベント:start・stop・tick・complete・loop イベント

CurvePointクラスのプロパティとしては、

  • formulaプロパティ:使用する公式(ICurveFormula)
  • 何度ごとに計算するか:stepSizeプロパティ
  • 開始角度の指定:startAngleプロパティ
  • 時計周りに計算するかどうか:isClockWiseプロパティ
  • ループさせるか:isLoopプロパティ

を用意しましたので、それらを駆使して曲線上の座標値でゴソゴソします。

またCurvePointクラスを使用して曲線をgraphics.lineTo()するCurveGraphicsクラスでも数種類の曲線描画ができたりします。

 


CurveGraphicsクラス

  • CurvePointクラスと「曲線の半径」を指定する
  • graphics.lineTo()などする
  • for文で一気に描画するパターン
  • タイマーで描画するパターン
  • 曲線の中心点が( x=0, y=0 )
  • graphics.endFill()のtrue/falseを指定して連続描画

 

CurveGraphicsクラスでの描画パターン(1)for文で一気に描くタイプ

  • 線・塗りで曲線を描画:lineCurve( isEndFill )
  • 曲線上の点を円で描画:chipCurve( chipRadius, isChipFill )
  • 曲線上の点Pと指定角度をずらした点Qを結んだ線を描画:lineAngleBetween( angleBetween )

サンプルは以下

http://www.libspark.org/svn/as3/CurveLib/trunk/samples/fp9/samples/

のSample01.fla・src/Sample01.asが該当です。

 

CurveGraphicsクラスでの描画パターン(2)タイマーでチクチク描くタイプ

  • 線・塗りで曲線をタイマー描画:tickLineCurve( delay, isEndFill )
  • 曲線上の点を円でタイマー描画:tickChipCurve( delay, chipRadius, isChipFill )
  • 曲線上の点Pと指定角度をずらした点Qを結んだ線をタイマー描画:tickLineAngleBetween( delay, angleBetween )

サンプルは以下

http://www.libspark.org/svn/as3/CurveLib/trunk/samples/fp9/samples/

のSample02.fla・src/Sample02.asが該当です。

 

また、塗りの設定で以下の違いがでます。

CurveGraphicsクラスでの描画 引数「isEndFill」== trueの場合

  • 線の描画の最後でgraphics.endFill()を実行
  • 次の描画ではあらためてbeginFill()にて色を設定する必要がある。

CurveGraphicsクラスでの描画 引数「isEndFill」== falseの場合

  • 線の描画の最後でもgraphics.endFill()をしない
  • endFill()、beginFill()をしないので、塗りが閉じられずにそのまま次の描画に続く。

サンプルは以下

http://www.libspark.org/svn/as3/CurveLib/trunk/samples/fp9/samples/

のSample03.fla・src/Sample03.as、Sample04.fla・src/Smaple04.asが該当です。

 

また、ASDocコメント記述の学習もしてみたので、その他については以下を参照してください。

CurveLib ASDoc
http://www.libspark.org/svn/as3/CurveLib/trunk/doc/fp9/asdoc-output/

 

Related posts

[Flash/Flex]ヘルプ用HTMLのローカル保存場所

Flash CS3とFlex Builder 3のヘルプに表示されるヘルプ用HTMLファイルのローカル保存場所をメモ。

 

Flash CS3

Mac OS X:

Macintosh HD/ライブラリ
Application Support/Adobe/Flash CS3/ja/Configuration/HelpPanel/Help

Windows XP:

C:¥Documents and Settings¥All Users
Application Data¥Adobe¥Flash CS3¥ja¥Configuration¥HelpPanel¥Help

 

ActionScript 3.0 コンポーネントリファレンスガイドなら、

Help/ActionScriptLangRefV3/index.htmlになる。


 

Flex Builder 3

Flex Builder 3の場合はというと、Flex Builder 3をインストールしたフォルダの「plugins/com.adobe.flexbuilder.helpなんとか」というのがヘルプ用HTMLファイル類。

 

その中で日本語ヘルプファイルは「com.adobe.flexbuilder.help.nl1_3.0.194161/nl/ja」にある「doc.zip」。

Adobe Flex Builder 3/plugins/com.adobe.flexbuilder.help.nl1_3.0.194161/nl/ja/doc.zip

 

Adobe Flex 3 リファレンスガイドなら、「doc.zip」を解凍して

doc/langref/index.htmlになる。

 

Webのリファレンスが使えない時は思い出してあげてください。
まぁ、普通にアプリを立ち上げればそれで済むんだけどね。

Related posts

[Silverlight]Adobe AS3 Class Diagram Viewer

既に、Pepeさんやnitoyonさんが紹介している「Flex, ActionScript, AIR Posters」をWebで見れるようにしてみました。

Flex Team
Update on Flex, ActionScript, AIR Posters

中垣 茂 ( Shigeru Nakagaki ) | ブログ ( Flex, AIR, ColdFusion )
AS3, Flex 3, AIR ポスター...97メガっすか

てっく煮ブログ
AIR・AS3・Flex3のクラス相関図ポスターが公開中

 

申し訳ないですが、Silverlightです。
Silverlight 2.0 Beta Silverlight 3のプラグインが必要なので見たい人は入れてください。

Microsoft Silverlight: Light Up the Web
http://www.microsoft.com/silverlight/default.aspx

 

Deep Zoom Adobe ActionScript 3.0 Class Diagram Viewer – Silverlight 3
http://violentcoding.com/content/AdobeAS3ClassDiagramViewer/index.html

posters.pdfから1枚7,200×10,800ピクセル(解像度300相当)のPNG画像に書き出し、それら5枚を横に並べています。各画像のサイズは、22.3MB、32.3MB、32.7MB、24.1MB、30.0MBというボリュームです。

Adobe AS3 Class Diagram Viewer01

 

SilverlightのDeep Zoomという機能を使って表示してます。
MIX08で紹介されていたHard Rock Cafeのサイトで使っているやつです。

Hard Rock Memorabilia
http://memorabilia.hardrock.com/

マウスドラッグで画像の移動やマウスホイールで拡大縮小ができます。

Adobe AS3 Class Diagram Viewer02

Deep Zoomでは拡大縮小や移動を行っている最中に、結構な負荷がかかっています・・・。
CPU%で拡大縮小・移動時には80% – 90%位のスコアをたたき出しております。

 

作りはMSエバンジェリスト 大野さんの完コピです。

develop .net : Silverlight 2 の新機能 – Deep Zoom
http://blogs.msdn.com/mohno/archive/2008/03/12/silverlight-2-deep-zoom.aspx

develop .net : Silverlight 2 の新機能 – Deep Zoom(マウスホイール編)
http://blogs.msdn.com/mohno/archive/2008/03/12/Silverlight-2-Deep-Zoom-with-Mouse-Wheel.aspx

Related posts