Alpha Compositing - Part II (4)
開始日 | 2007年03月26日 |
最終更新日 | 2009年06月03日 |
はじめに
Alpha Compositing - Part Iで説明した方法を応用し、Web2.0的な画像を作成する方法について説明・使い方を記しています。
全4ページのうち、ここは4ページ目です。
全4ページのうち、ここは4ページ目です。
原著
「Alpha Compositing - Part II - Page4」
http://rmagick.rubyforge.org/web2/web2-4.html
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
( - )