# オブジェクトの外観と表現

シンデレラの描画エンジンは、点、直線、文字などの要素を表示するときの外観の初期設定を持っています。描画命令が修飾子なしで実行されるときは初期設定が用いられます。これは、視覚的な統一を図るのに便利です。外観として主なものは 色, 大きさ, そして 透明度です。

## 表現データの一時保存: `gsave()` と `grestore()`

一時的に異なる初期設定の表現データを使いたいことがよくあります。そのために、演算子 `gsave()` と `grestore()` が用意されています。演算子 `gsave` は図形の情報(大きさ、色、透明度)をスタックに保存します。演算子 `grestore` はスタックからこれらの情報を読み出します。表現のデータに加え、局所的な座標系に関する情報も同様に保存します。
次も参照してください: 座標系

## 大きさ

初期状態の大きさは `pointsize()`, `linesize()`, `textsize()` の３つの演算子で設定できます。大きさは、実数で指定します。点と線の大きさは1から20までの整数で、ピクセルのサイズです。次のコードと実行結果はその例です。

    sizes=1..15;
    forall(sizes,
      pointsize(#);
      textsize(#+4);
      draw((#,0));
      drawtext((#,1),#);
    )

## 色の設定

色は、赤/緑/青(R/G/B)の3つの実数のリストで指定します。これを色ベクトルといいます。それぞれの値は0から1までで、0が最も暗く1が最も明るくなります。このＲＧＢ指定による基本的な8色は次のようになります。

color: | vector:
black | (0,0,0)
red | (1,0,0)
green | (0,1,0)
blue | (0,0,1)
cyan | (0,1,1)
magenta | (1,0,1)
yellow | (1,1,0)
white | (1,1,1)

初期状態の色は、 `pointcolor()`, `linecolor()`, `textcolor()`の3つの演算子で設定できます。さらに、 `color()` 演算子はすべてのオブジェクトの色を同時に設定します。
ある実数が色のコードと解釈される場合、0以下の数は0に、1以上の数は1に置き換えられます。
次のコードと実行結果はその例です。

    n=13;
    ind=1..n;
    pointsize(9);
    forall(ind,i,
      forall(ind,j,
        pointcolor((i/n,j/n,0));
        draw((i,j),noborder->true);
        pointcolor((0,i/n,j/n));
        draw((i+15,j),noborder->true);
        pointcolor((j/n,0,i/n));
        draw((i+30,j),noborder->true);
      )
    )

## 透明度

透明度は0から1までの実数で指定します。ここで、0は完全に透明で、1は完全に不透明になります。 この範囲外の値は0か1のどちらかに設定されます。透明度は、演算子 `alpha()` によりすべての要素に設定されます。

## 色の関数

色についての計算を簡単にするために、色の値を返すいくつかの関数が用意されています。

### 赤色 `red()`:

説明: この演算子は緑と青の値を0にした色ベクトルを作ります。赤の値は `` で設定されます。

### 緑色 `green()`:

説明: この演算子は赤と青の値を0にした色ベクトルを作ります。緑の値は `` で設定されます。

### 青色 `blue()`:

説明: この演算子は赤と緑の値を0にした色ベクトルを作ります。青の値は `` で設定されます。

### 灰色 `gray()`:

説明: この演算子は、赤、緑、青の各値を `` に設定した色ベクトルを作ります。

### 虹色 `hue()`:

説明: この演算子は、すべての色のうちの一つを表す色ベクトルを作ります。 `` は0から1までの数です。この値の範囲は色相環の範囲を表します。１より大きな値の場合には、色相環を何周かして色を決めます。
次のコードと実行結果はその例です。

    n=360;
    ind=(1..n)/n;
    linesize(2);
    forall(ind,
      color(hue(#));
      draw((0,0),(sin(#*2*pi),cos(#*2*pi)))
    )

Page last modified on Tuesday 06 of March, 2012 [10:51:36 UTC].
The original document is available at http://doc.cinderella.de/tiki-index.php?page=Appearance%20of%20ObjectsJ