「Alpha Compositing - Part II-4」の編集履歴(バックアップ)一覧に戻る

Alpha Compositing - Part II-4 - (2009/06/03 (水) 10:16:08) のソース

*Alpha Compositing - Part II (4)
#center(){
|開始日|2007年03月26日|
|最終更新日|&date(j)|
}

*はじめに
[[Alpha Compositing - Part I]]で説明した方法を応用し、Web2.0的な画像を作成する方法について説明・使い方を記しています。
全4ページのうち、ここは4ページ目です。

**原著
#center(){
「Alpha Compositing - Part II - Page4」
http://rmagick.rubyforge.org/web2/web2-4.html
}

**注意
-もともと個人利用を目的として日本語化したために、けっこう意訳している部分があります。「意味分からないよ」とか「おかしいんじゃない?」とかいうのがあれば、オリジナルを参照するか、コメントで質問してください(がんばって調べます)。

**更新履歴
-2008/3/26 作成開始&超意訳の完了。

----
*訳文

#left(){[[← Page 3に戻る>Alpha Compositing - Part II-3]]}

**starメソッド(The star method)
星形の図形を描くために、高校時代に学んだ三角関数を引っ張ってこなければならなかったよ。しかも唯一思い出せたのがピタゴラスの定理だけだったけど、ラッキーなことにそれで十分だったんだ。円周上の点の座標は以下のように計算できるんだよね。
#codehighlight(ruby){{
x = r * cos(theta)
y = r * sin(theta)}}
rは円の半径で、thetaは内角だ。Magick::Draw#starメソッドは2種類の25角形を計算し、それを使っている。外側の1頂点は内側の別の頂点に連なっていて、また内側の多角形は外側のそれと比べて辺の半分だけ回転させるんだ。Draw#starメソッドは外側・内側両方の頂点座標を計算するよ。

下の図を見てもらえれば、赤の多角形と青の多角形がどのように星形を形作っているかが分かるだろう?

#image(http://rmagick.rubyforge.org/web2/starburst.gif,title=starburst,center)

Magick::Image#starメソッドはMagick::Drawのインスタンスを作り、属性を設定した後にMagick::Draw#starメソッドを呼ぶ。そして星形になる多角形を作る。そして、Magick::Draw#drawメソッドで最終的な図形を作っているんだ。

#codehighlight(ruby){{
module Magick
    class Draw
        def star(sides, inner_radius, outer_radius)
            theta = 0.0
            incr = Math::PI * 2.0 / sides
            half_incr = incr / 2.0
            points = []
            sides.times do
                points << outer_radius * Math::cos(theta)
                points << outer_radius * Math::sin(theta)
                points << inner_radius * Math::cos(theta + half_incr)
                points << inner_radius * Math::sin(theta + half_incr)
                theta += incr
            end
            polygon *points
        end
    end

    class Image
        def star(sides, inner_radius, outer_radius, stroke, fill)
            gc = Draw.new
            gc.translate columns/2.0, rows/2.0
            gc.fill fill
            gc.stroke stroke
            gc.star sides, inner_radius, outer_radius
            gc.draw self
        end
    end
end
}}
----
(&counter())
ウィキ募集バナー