Creativeでのベジェ曲線の描き方まとめ

small_4134503728
photo credit: Dave DeSandro via photopin cc

今回は、先日のYahoo Creative Award 2013で作品を作成した際に使用したCreativeJSでのベジェ曲線の書き方にについて、備忘録としてまとめておく。

1. IllustratorかPhotoshopでベジェ曲線を描いてみる

IllustratorやPhotoshopで、ペンツールを利用して思い描く曲線を書いてみる。例えば、下図のようなS字の線を書いたとする。 ベジェ曲線は、始点ベクトルと終点ベクトルで表される(と勝手に思っている)。緑色の矢印がそれぞれのベクトルを表す。 skitch.1

作成したベジェ曲線のポイントにカーソルを合わせ、座標情報を取得する。 skitch.2

全てのポイントを座標で表すと、おおよそ下図のようになる。

skitch

2. Canvasを用意する

下記のように、canvas要素を用意し、画面が読み込まれた時にそこにベジェ曲線を作るようにする。

<canvas id="myCanvas" width=600 height=900></canvas>

3. コードを書く

コード全体。大まかな流れとしては、 + canvas要素を用意 + CreateJSを読み込む(今回使用しているのは、その内EaselJSのライブラリのみ) + stageを作成 + myShapeインスタンスを作成 + インスタンス配置位置を決定 + ベジェ曲線を作成 + stageをアップデート

<!DOCTYPE html>
<html lang="ja">
<head>
<title>ベジェ曲線テスト</title>
<style>
canvas {
    border: 1px solid #000;
}
</style>
</head>
<body onload="initialize()">
<canvas id="myCanvas" width=600 height=900></canvas>
<script>
var createjs = window;
</script>
<script src="easeljs/utils/UID.js"></script>
<script src="easeljs/geom/Matrix2D.js"></script>
<script src="easeljs/geom/Point.js"></script>
<script src="easeljs/events/EventDispatcher.js"></script>
<script src="easeljs/display/DisplayObject.js"></script>
<script src="easeljs/display/Container.js"></script>
<script src="easeljs/display/Stage.js"></script>
<script src="easeljs/display/Bitmap.js"></script>
<script src="easeljs/display/Graphics.js"></script>
<script src="easeljs/display/Shape.js"></script>
<script src="easeljs/display/Shadow.js"></script>
<script>
    var stage;
    //canvasを用意
    function initialize(){
        //canvasを用意
        var canvasElement = document.getElementById("myCanvas");
        stage = new Stage(canvasElement);
        createShape(0,0);
    }
    //インスタンスを配置
    function setAppearance(instance, nX, nY){
        instance.x = nX;
        instance.y = nY;
        stage.addChild(instance);
    }
    //ベジェ曲線を描画
    function createShape(nX, nY){
        var myShape = new Shape();
        var myGraphics = myShape.graphics;
        setAppearance(myShape, nX, nY);
        //ベジェ曲線本体
        myGraphics.beginStroke("#000000");
        myGraphics.moveTo(105,95).bezierCurveTo(140,145,135,60,170,95);
        myGraphics.endStroke();
        stage.update();
    }
</script>
</body>
</html>

4. できました!

105, 95 をスタート地点として、canvas要素内にベジェ曲線が描かれます。 (分かりやすいように、PixelWindowでピクセル定規を表示しています)

スクリーンショット 2013-08-23 1.28.03