1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354
|
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja">
<head>
<meta http-equiv="Content-type" content="text/html; charset=UTF-8" />
<title>Cairo::Matrixクラス</title>
<link href="../doc.css" type="text/css" rel="stylesheet" />
</head>
<div class="footer">
<ul>
<li><a href="./">索引</a></li>
</ul>
</div>
</body>
<h1><a name="label-0" id="label-0">Cairo::Matrixクラス</a></h1><!-- RDLabel: "Cairo::Matrixクラス" -->
<p>拡大・回転・剪断とそれらを組み合わせた変換であるアフィン変換
を持つオブジェクトです。点(x, y)は以下のように変換されます。</p>
<pre>x_new = xx * x + xy * y + x0
y_new = yx * x + yy * y + y0</pre>
<h2><a name="label-1" id="label-1">オブジェクト階層</a></h2><!-- RDLabel: "オブジェクト階層" -->
<ul>
<li>Object
<ul>
<li>Cairo::Matrix</li>
</ul></li>
</ul>
<h2><a name="label-2" id="label-2">クラスメソッド</a></h2><!-- RDLabel: "クラスメソッド" -->
<dl>
<dt><a name="label-3" id="label-3"><code>Cairo::Matrix.identity</code></a></dt><!-- RDLabel: "Cairo::Matrix.identity" -->
<dd>
恒等変換をする行列を生成します。
<ul>
<li>戻り値: 単位行列の<a href="cairo-matrix.html">Cairo::Matrix</a>オブジェクト。</li>
</ul></dd>
<dt><a name="label-4" id="label-4"><code>Cairo::Matrix.new(<var>xx</var>, <var>yx</var>, <var>xy</var>, <var>yy</var>, <var>x0</var>, <var>y0</var>)</code></a></dt><!-- RDLabel: "Cairo::Matrix.new" -->
<dd>
対応する成分を設定した行列を生成します。
<ul>
<li>xx: アフィン変換のxx成分。</li>
<li>yx: アフィン変換のyx成分。</li>
<li>xy: アフィン変換のxy成分。</li>
<li>yy: アフィン変換のyy成分。</li>
<li>x0: アフィン変換のX平行移動成分。</li>
<li>y0: アフィン変換のY平行移動成分。</li>
<li>戻り値: <a href="cairo-matrix.html">Cairo::Matrix</a>オブジェクト。</li>
</ul></dd>
<dt><a name="label-5" id="label-5"><code>Cairo::Matrix.rotate(<var>radians</var>)</code></a></dt><!-- RDLabel: "Cairo::Matrix.rotate" -->
<dd>
<var>radians</var>回転する変換を行う行列を返します。
<ul>
<li>radians: 回転する角度(ラジアン)。正の角度は軸から正
のY軸に進む方向に回転します。cairoのデフォルトの軸の
方向と同じように、正の角度は時計回りに回転します(?
FIXME: 逆じゃない?)。</li>
<li>戻り値: <a href="cairo-matrix.html">Cairo::Matrix</a>オブジェクト。</li>
</ul></dd>
<dt><a name="label-6" id="label-6"><code>Cairo::Matrix.scale(<var>sx</var>, <var>sy</var>)</code></a></dt><!-- RDLabel: "Cairo::Matrix.scale" -->
<dd>
X方向に<var>sx</var>、Y方向に<var>sy</var>拡大する行列を返します。
<ul>
<li>sx: X方向の拡大率。</li>
<li>sy: Y方向の拡大率。</li>
<li>戻り値: <a href="cairo-matrix.html">Cairo::Matrix</a>オブジェクト。</li>
</ul></dd>
<dt><a name="label-7" id="label-7"><code>Cairo::Matrix.translate(<var>tx</var>, <var>ty</var>)</code></a></dt><!-- RDLabel: "Cairo::Matrix.translate" -->
<dd>
X方向に<var>tx</var>、Y方向に<var>ty</var>平行移動を行う行列を返
します。
<ul>
<li>tx: X方向の平行移動量。</li>
<li>ty: Y方向の平行移動量。</li>
<li>戻り値: <a href="cairo-matrix.html">Cairo::Matrix</a>オブジェクト。</li>
</ul></dd>
</dl>
<h2><a name="label-8" id="label-8">インタンスメソッド</a></h2><!-- RDLabel: "インタンスメソッド" -->
<dl>
<dt><a name="label-9" id="label-9"><code>xx</code></a></dt><!-- RDLabel: "xx" -->
<dd>
アフィン変換のxx成分を返します。
<ul>
<li>戻り値: アフィン変換のxx成分。</li>
</ul></dd>
<dt><a name="label-10" id="label-10"><code>xx=(<var>xx</var>)</code></a></dt><!-- RDLabel: "xx=" -->
<dt><a name="label-11" id="label-11"><code>set_xx(<var>xx</var>)</code></a></dt><!-- RDLabel: "set_xx" -->
<dd>
アフィン変換のxx成分を設定します。
<ul>
<li>xx: アフィン変換のxx成分。</li>
</ul></dd>
<dt><a name="label-12" id="label-12"><code>yx</code></a></dt><!-- RDLabel: "yx" -->
<dd>
アフィン変換のyx成分を返します。
<ul>
<li>戻り値: アフィン変換のyx成分。</li>
</ul></dd>
<dt><a name="label-13" id="label-13"><code>yx=(<var>yx</var>)</code></a></dt><!-- RDLabel: "yx=" -->
<dt><a name="label-14" id="label-14"><code>set_yx(<var>yx</var>)</code></a></dt><!-- RDLabel: "set_yx" -->
<dd>
アフィン変換のyx成分を設定します。
<ul>
<li>yx: アフィン変換のyx成分。</li>
</ul></dd>
<dt><a name="label-15" id="label-15"><code>xy</code></a></dt><!-- RDLabel: "xy" -->
<dd>
アフィン変換のxy成分を返します。
<ul>
<li>戻り値: アフィン変換のxy成分。</li>
</ul></dd>
<dt><a name="label-16" id="label-16"><code>xy=(<var>xy</var>)</code></a></dt><!-- RDLabel: "xy=" -->
<dt><a name="label-17" id="label-17"><code>set_xy(<var>xy</var>)</code></a></dt><!-- RDLabel: "set_xy" -->
<dd>
アフィン変換のxy成分を設定します。
<ul>
<li>xy: アフィン変換のxy成分。</li>
</ul></dd>
<dt><a name="label-18" id="label-18"><code>yy</code></a></dt><!-- RDLabel: "yy" -->
<dd>
アフィン変換のyy成分を返します。
<ul>
<li>戻り値: アフィン変換のyy成分。</li>
</ul></dd>
<dt><a name="label-19" id="label-19"><code>yy=(<var>yy</var>)</code></a></dt><!-- RDLabel: "yy=" -->
<dt><a name="label-20" id="label-20"><code>set_yy(<var>yy</var>)</code></a></dt><!-- RDLabel: "set_yy" -->
<dd>
アフィン変換のyy成分を設定します。
<ul>
<li>yy: アフィン変換のyy成分。</li>
</ul></dd>
<dt><a name="label-21" id="label-21"><code>x0</code></a></dt><!-- RDLabel: "x0" -->
<dd>
アフィン変換のX平行移動成分を返します。
<ul>
<li>戻り値: アフィン変換のX平行移動成分。</li>
</ul></dd>
<dt><a name="label-22" id="label-22"><code>x0=(<var>x0</var>)</code></a></dt><!-- RDLabel: "x0=" -->
<dt><a name="label-23" id="label-23"><code>set_x0(<var>x0</var>)</code></a></dt><!-- RDLabel: "set_x0" -->
<dd>
アフィン変換のX平行移動成分を設定します。
<ul>
<li>x0: アフィン変換のX平行移動成分。</li>
</ul></dd>
<dt><a name="label-24" id="label-24"><code>y0</code></a></dt><!-- RDLabel: "y0" -->
<dd>
アフィン変換のY平行移動成分を返します。
<ul>
<li>戻り値: アフィン変換のY平行移動成分。</li>
</ul></dd>
<dt><a name="label-25" id="label-25"><code>y0=(<var>y0</var>)</code></a></dt><!-- RDLabel: "y0=" -->
<dt><a name="label-26" id="label-26"><code>set_y0(<var>y0</var>)</code></a></dt><!-- RDLabel: "set_y0" -->
<dd>
アフィン変換のY平行移動成分を設定します。
<ul>
<li>y0: アフィン変換のY平行移動成分。</li>
</ul></dd>
<dt><a name="label-27" id="label-27"><code>clone</code></a></dt><!-- RDLabel: "clone" -->
<dd>
複製を返します。<var>self</var>が凍結されているオブジェクト
なら複製されたオブジェクトも凍結されています。
<ul>
<li>戻り値: <a href="cairo-matrix.html">Cairo::Matrix</a>オブジェクト。</li>
</ul></dd>
<dt><a name="label-28" id="label-28"><code>dup</code></a></dt><!-- RDLabel: "dup" -->
<dd>
複製を返します。
<ul>
<li>戻り値: <a href="cairo-matrix.html">Cairo::Matrix</a>オブジェクト。</li>
</ul></dd>
<dt><a name="label-29" id="label-29"><code>identity!</code></a></dt><!-- RDLabel: "identity!" -->
<dd>
単位行列にします。</dd>
<dt><a name="label-30" id="label-30"><code>invert</code></a></dt><!-- RDLabel: "invert" -->
<dd>
逆行列を返します。全ての変換行列が逆行列を持っているわ
けではありません。行列が点をつぶすなら(退化という
(FIXME))逆行列がなく、<a href="cairo-invalid-matrix-error.html">Cairo::InvalidMatrixError</a>例外
が発生します。
<ul>
<li>戻り値: <a href="cairo-matrix.html">Cairo::Matrix</a>オブジェクト。</li>
</ul></dd>
<dt><a name="label-31" id="label-31"><code>invert!</code></a></dt><!-- RDLabel: "invert!" -->
<dd>
<a href="cairo-matrix.html#label-30">Cairo::Matrix#invert</a>の破壊的なバージョンです。</dd>
<dt><a name="label-32" id="label-32"><code>*(<var>other</var>)</code></a></dt><!-- RDLabel: "*" -->
<dt><a name="label-33" id="label-33"><code>multiply(<var>other</var>)</code></a></dt><!-- RDLabel: "multiply" -->
<dd>
<a href="cairo-matrix.html#label-33">Cairo::Matrix#multiply</a>の別名です。
<var>self</var>と<var>other</var>の積を返します。結果として最初
に<var>self</var>の変換を行い、次に<var>other</var>の変換を行う新
しい変換を返します。
<ul>
<li>other: <a href="cairo-matrix.html">Cairo::Matrix</a>オブジェクト。</li>
<li>戻り値: <a href="cairo-matrix.html">Cairo::Matrix</a>オブジェクト。</li>
</ul></dd>
<dt><a name="label-34" id="label-34"><code>multiply!(<var>other</var>)</code></a></dt><!-- RDLabel: "multiply!" -->
<dd>
<a href="cairo-matrix.html#label-33">Cairo::Matrix#multiply</a>の破壊的なバージョンです。
<ul>
<li>other: <a href="cairo-matrix.html">Cairo::Matrix</a>オブジェクト。</li>
</ul></dd>
<dt><a name="label-35" id="label-35"><code>rotate(<var>radians</var>)</code></a></dt><!-- RDLabel: "rotate" -->
<dd>
<var>radians</var>回転する変換を適用した新しい行列を返します。
この結果、最初に<var>radians</var>回転し、次に<var>self</var>を適
用する変換になります。
<ul>
<li>radians: 回転する角度(ラジアン)。正の角度は軸から正
のY軸に進む方向に回転します。cairoのデフォルトの軸の
方向と同じように、正の角度は時計回りに回転します(?
FIXME: 逆じゃない?)。</li>
<li>戻り値: <a href="cairo-matrix.html">Cairo::Matrix</a>オブジェクト。</li>
</ul></dd>
<dt><a name="label-36" id="label-36"><code>rotate!(<var>radians</var>)</code></a></dt><!-- RDLabel: "rotate!" -->
<dd>
<a href="cairo-matrix.html#label-35">Cairo::Matrix#rotate</a>の破壊的なバージョンです。
<ul>
<li>radians: 回転する角度(ラジアン)。正の角度は軸から正
のY軸に進む方向に回転します。cairoのデフォルトの軸の
方向と同じように、正の角度は時計回りに回転します(?
FIXME: 逆じゃない?)。</li>
</ul></dd>
<dt><a name="label-37" id="label-37"><code>scale(<var>sx</var>, <var>sy</var>)</code></a></dt><!-- RDLabel: "scale" -->
<dd>
X方向に<var>sx</var>、Y方向に<var>sy</var>拡大する変換を適用した
新しい行列を返します。この結果、最初に<var>sx</var>,
<var>sy</var>だけ拡大し、次に<var>self</var>を適用する変換になり
ます。
<ul>
<li>sx: X方向の拡大率。</li>
<li>sy: Y方向の拡大率。</li>
<li>戻り値: <a href="cairo-matrix.html">Cairo::Matrix</a>オブジェクト。</li>
</ul></dd>
<dt><a name="label-38" id="label-38"><code>scale!(<var>sx</var>, <var>sy</var>)</code></a></dt><!-- RDLabel: "scale!" -->
<dd>
<a href="cairo-matrix.html#label-37">Cairo::Matrix#scale</a>の破壊的なバージョンです。
<ul>
<li>sx: X方向の拡大率。</li>
<li>sy: Y方向の拡大率。</li>
</ul></dd>
<dt><a name="label-39" id="label-39"><code>set(<var>xx</var>, <var>yx</var>, <var>xy</var>, <var>yy</var>, <var>x0</var>, <var>y0</var>)</code></a></dt><!-- RDLabel: "set" -->
<dd>
対応する成分を設定します。
<ul>
<li>xx: アフィン変換のxx成分。</li>
<li>yx: アフィン変換のyx成分。</li>
<li>xy: アフィン変換のxy成分。</li>
<li>yy: アフィン変換のyy成分。</li>
<li>x0: アフィン変換のX平行移動成分。</li>
<li>y0: アフィン変換のY平行移動成分。</li>
</ul></dd>
<dt><a name="label-40" id="label-40"><code>to_a</code></a></dt><!-- RDLabel: "to_a" -->
<dd>
各成分を配列として返します。
<ul>
<li>戻り値: <code>[xx, yx, xy, yy, x0, y0]</code>
<ul>
<li>xx: アフィン変換のxx成分。</li>
<li>yx: アフィン変換のyx成分。</li>
<li>xy: アフィン変換のxy成分。</li>
<li>yy: アフィン変換のyy成分。</li>
<li>x0: アフィン変換のX平行移動成分。</li>
<li>y0: アフィン変換のY平行移動成分。</li>
</ul></li>
</ul></dd>
<dt><a name="label-41" id="label-41"><code>to_s</code></a></dt><!-- RDLabel: "to_s" -->
<dd>
文字列に変換します。
<ul>
<li>戻り値: 文字列表現の<a href="cairo-matrix.html">Cairo::Matrix</a>オブジェクト。</li>
</ul></dd>
<dt><a name="label-42" id="label-42"><code>transform_distance(<var>dx</var>, <var>dy</var>)</code></a></dt><!-- RDLabel: "transform_distance" -->
<dd>
<p>距離ベクトル(<var>dx</var>, <var>dy</var>)を<var>self</var>で変換しま
す。<a href="cairo-matrix.html#label-43">Cairo::Matrix#transform_point</a>と似ていますが、平行移
動成分を無視するところが違います。返るベクトルは以下の
ように計算されます。</p>
<pre>dx2 = dx * a + dy * c;
dy2 = dx * b + dy * d;</pre>
<p>アフィン変換は位置不変です。同じベクトルはいつも同じベ
クトルに変換されます。もし、(x1, y1)が(x2, y2)に変換さ
れるなら、どんなx1, x2に対しても(x1 + <var>dx</var>, y1 +
<var>dy</var>)は(x1 + <var>dx2</var>, y1 + <var>dy2</var>)に変換されま
す。</p>
<ul>
<li>dx: 距離ベクトルのX成分。</li>
<li>dy: 距離ベクトルのY成分。</li>
<li>戻り値: <code>[dx2, dy2]</code>
<ul>
<li>dx2: 変換された距離ベクトルのX成分。</li>
<li>dy2: 変換された距離ベクトルのY成分。</li>
</ul></li>
</ul></dd>
<dt><a name="label-43" id="label-43"><code>transform_point(<var>x</var>, <var>y</var>)</code></a></dt><!-- RDLabel: "transform_point" -->
<dd>
点(<var>x</var>, <var>y</var>)を<var>self</var>で変換します。
<ul>
<li>x: X座標。</li>
<li>y: Y座標。</li>
<li>戻り値: <code>[x2, y2]</code>
<ul>
<li>x2: 変換されたX座標。</li>
<li>y2: 変換されたY座標。</li>
</ul></li>
</ul></dd>
<dt><a name="label-44" id="label-44"><code>translate(<var>tx</var>, <var>ty</var>)</code></a></dt><!-- RDLabel: "translate" -->
<dd>
X方向に<var>tx</var>、Y方向に<var>ty</var>平行移動を行う行列を返
します。この結果、最初に<var>tx</var>, <var>ty</var>平行移動し、次
に<var>self</var>を適用する変換になります。
<ul>
<li>tx: X方向の平行移動量。</li>
<li>ty: Y方向の平行移動量。</li>
<li>戻り値: <a href="cairo-matrix.html">Cairo::Matrix</a>オブジェクト。</li>
</ul></dd>
<dt><a name="label-45" id="label-45"><code>translate!(<var>tx</var>, <var>ty</var>)</code></a></dt><!-- RDLabel: "translate!" -->
<dd>
<a href="cairo-matrix.html#label-44">Cairo::Matrix#translate</a>の破壊的なバージョンです。
<ul>
<li>tx: X方向の平行移動量。</li>
<li>ty: Y方向の平行移動量。</li>
</ul></dd>
<dt><a name="label-46" id="label-46"><code>==(<var>other</var>)</code></a></dt><!-- RDLabel: "==" -->
<dd>
<p><em>Since 1.7</em>: <var>other</var>が<a href="cairo-matrix.html">Cairo::Matrix</a>オブ
ジェクトで、xx, yx, xy, yy, x0, y0それぞれが<code>==</code>だっ
た場合に<code>true</code>を返します。</p>
<ul>
<li>other: 比較対象のオブジェクト。</li>
<li>戻り値: <code>self</code>と<code>other</code>が等しければ</li>
</ul>
<p><code>true</code>、そうでなければ<code>false</code>。</p></dd>
</dl>
<h2><a name="label-47" id="label-47">参考</a></h2><!-- RDLabel: "参考" -->
<ul>
<li><a href="index.html#label-0">索引</a></li>
</ul>
<h2><a name="label-48" id="label-48">変更履歴</a></h2><!-- RDLabel: "変更履歴" -->
<ul>
<li>2008-08-17: kou: rcairo 1.7対応。</li>
<li>2007-05-21: kou: スタート。</li>
</ul>
<div class="footer">
<ul>
<li><a href="./">索引</a></li>
</ul>
</div>
</body>
</html>
|