部品の位置関係 について

rcairoのリファレンスを読んでいたら、
Cairo::Context#rel_move_toとかCairo::Context#rel_line_toが、あった。
相対座標を使えるみたい。
これを使って位置管理を、した方が位置管理が直感的かな。
しばらく、この方向で煮詰めてみます。
部品のクラスは、絶対座標(x, y)を持つ。
width, heightのかわりに
x_range, y_range = (-10..10), (-10..10) と使うか、
絶対座標からの半径をエリア(area = 10) みたいにして使ってみるか。
後、形が持つ点は、絶対座標からのベクトル(相対座標)にする。
こうしておくと、Cairo::Matrixの扱いが直感的に扱える。
四角を書くにしても、円を書くにしても、所詮、点と点を結ぶだけだもん。
三角関数は多用するけど、気にしない。
他の部品との関係(干渉)とかは、
Math::sqrt((x0 - x1) ** 2 + (y0 - y1) ** 2)
と書くよりも
Cairo::Point#distanceがピンと来た。
Cairo::Point.new(x0, y0).distance(Cairo::Point.new(x1, y1))
これで部品同士の中心の距離を導く。
あと、Rangeクラスも使いたい。
今までは
50 < x && x < 100
とか使ってたけど
Rangeクラスを使うと
(51 .. 99).include?(x)
(51 ...100)include?(x)
Range.new(51, 99).include?(x)
とか、スッキリ書ける。
後、テキストの扱いも追い込まないとね。
Cairo::Glyphとか、今から理解します。
今回は、プログラムは無い。
関係ないが、Rangeクラスを調べてたら
stepメソッドがあった。
0.step(359, 10) { |d| puts d}

(0...360).step(10) {|d| puts d}
と書ける。
後者の方がいいな。
[PR]
by gaziya | 2011-05-12 22:35