selflearn @ ウィキ

Alpha Compositing - Part II-4

最終更新:

selflearn

- view
メンバー限定 登録/ログイン

Alpha Compositing - Part II (4)


開始日 2007年03月26日
最終更新日 2009年06月03日

はじめに

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

原著


「Alpha Compositing - Part II - Page4」
http://rmagick.rubyforge.org/web2/web2-4.html

注意

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

更新履歴

  • 2008/3/26 作成開始&超意訳の完了。


訳文



starメソッド(The star method)

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

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

imageプラグインエラー : 画像を取得できませんでした。しばらく時間を置いてから再度お試しください。
Magick::Image#starメソッドはMagick::Drawのインスタンスを作り、属性を設定した後にMagick::Draw#starメソッドを呼ぶ。そして星形になる多角形を作る。そして、Magick::Draw#drawメソッドで最終的な図形を作っているんだ。

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
 

-

タグ:

Ruby RMagick
ウィキ募集バナー