<?xml version="1.0" encoding="utf-8"?><!DOCTYPE article  PUBLIC '-//OASIS//DTD DocBook XML V4.4//EN'  'http://www.docbook.org/xml/4.4/docbookx.dtd'><article><articleinfo><title>変換</title><revhistory><revision><revnumber>4</revnumber><date>2008-08-22 04:35:03</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>3</revnumber><date>2008-08-22 04:33:17</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>2</revnumber><date>2008-08-22 04:26:57</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>1</revnumber><date>2008-08-22 04:25:54</date><authorinitials>masahiko</authorinitials></revision></revhistory></articleinfo><section><title>変換</title><para>transform属性 </para><para>描画を行うときに、位置や大きさの変換をtransform属性で指定することができます。 use要素で用いた例です。 </para><itemizedlist><listitem override="none"><screen><![CDATA[ <use xlink:href="#名前"  x="位置" y="位置" transform="変換内容" />]]></screen></listitem></itemizedlist><para>のように書きます。 </para><!--rule (<hr>) is not applicable to DocBook--><section><title>移動</title><para>移動は translate(移動量X, 移動量ｙ) で指定します。 </para><itemizedlist><listitem override="none"><screen><![CDATA[ <use xlink:href="#名前"  x="0" y="0" transform="translate(10,20)" />]]></screen></listitem></itemizedlist><para>と書くと、ｘ方向に１０、ｙ方向に２０移動された位置に表示されます。 x=&quot;0&quot; y=&quot;0&quot; として使うのがほとんどです。 </para><itemizedlist><listitem override="none"><screen><![CDATA[ <use xlink:href="#名前"  x="10" y="20" />]]></screen></listitem></itemizedlist><para>という方法でも可能です。 </para><para>拡大縮小や回転と組み合わせて使う場合には、translateを用いる方が分りやすい。 </para><!--rule (<hr>) is not applicable to DocBook--></section><section><title>拡大縮小</title><para>大きさの変更は scale(拡大率X, 拡大率ｙ) で指定します。 </para><itemizedlist><listitem override="none"><screen><![CDATA[ <use xlink:href="#名前"  x="0" y="0" transform="scale(0.5, 0.5)" />]]></screen></listitem></itemizedlist><para>と書くと、ｘ方向ｙ方向とも半分の大きさになります。 原点を基準として拡大縮小されるので x=&quot;0&quot; y=&quot;0&quot; として使うのがほとんどです。 </para><para>上下左右で異なる拡大率を指定すると、縦長、横長の拡大縮小ができます。 </para><para>拡大率に負の値を指定することもできます。 ｘ方向の拡大率を負にすると左右反転、ｙ方向の拡大率を負にすると上下反転になります。 </para><!--rule (<hr>) is not applicable to DocBook--></section><section><title>回転</title><para>回転は rotate(回転角度, 中心座標X, 中心座標ｙ) で指定します。 </para><itemizedlist><listitem override="none"><screen><![CDATA[ <use xlink:href="#名前"  x="0" y="0" transform="rotate(45, 10, 10)" />]]></screen></listitem></itemizedlist><para>と書くと、(10,10)を中心に４５度回転します。 この場合も x=&quot;0&quot; y=&quot;0&quot; として使うのが分りやすいでしょう。 </para><!--rule (<hr>) is not applicable to DocBook--></section><section><title>せん断</title><para>長方形を左右または上下から押してずらし、平行四辺形に変えるような変換です。 </para><para>次のように記述します。値は角度です。 </para><itemizedlist><listitem override="none"><screen><![CDATA[ transform=skewX(30)
 transform=skeyY(50)]]></screen></listitem></itemizedlist><!--rule (<hr>) is not applicable to DocBook--></section><section><title>変換の組み合わせ</title><para>translate, scale, rotate  などを並べて記述することもできます。 この場合、右側のものから順に適用されます。 </para><itemizedlist><listitem override="none"><screen><![CDATA[ transform="translate(100,50) scale(0.5, 0.5)"]]></screen></listitem></itemizedlist><para>とすると、大きさを半分にした後、移動が行われます。 </para><para>属性 x=&quot;数値&quot; y=&quot;数値&quot; を指定した場合は、これが先に適用されます。 </para><para>適用順は </para><orderedlist numeration="arabic"><listitem><para>属性 x, y </para></listitem><listitem><para>transform内の右端の変換 </para></listitem><listitem><para>transform内の左にある変換 </para></listitem></orderedlist><para>になります。 </para><para>変換の順序や合成は行列演算に対応しています。 </para><!--rule (<hr>) is not applicable to DocBook--></section><section><title>１次変換の行列</title><para>座標を縦ベクトルで表すとき、その１次変換は２×２の行列で表され </para><itemizedlist><listitem override="none"><para><inlinemediaobject><imageobject><imagedata fileref="http://ei-www.hyogo-dai.ac.jp/~masahiko/moin.cgi/%E5%A4%89%E6%8F%9B?action=AttachFile&amp;do=get&amp;target=transform1.png"/></imageobject><textobject><phrase>transform1.png</phrase></textobject></inlinemediaobject> </para></listitem></itemizedlist><para>により、点（ｘ、ｙ）が点（ｘ’、ｙ’）に移されます。 </para><para>１次変換では、原点を中心とした拡大縮小、回転、せん断やそれらを組み合わせた変換ができました。 </para><para>移動は行列を掛けるのではなく、ベクトルの加算に対応しました。 </para><!--rule (<hr>) is not applicable to DocBook--><para> 一般に図形の変換は次のように分類できます。 </para><itemizedlist><listitem override="none"><para>１）形を変えないもの </para></listitem><listitem override="none"><para>２）平行線を平行線に移すもの </para></listitem><listitem override="none"><para>３）直線を直線に移すもの </para></listitem><listitem override="none"><para>４）曲線を曲線に移すもの </para></listitem></itemizedlist><para>１次変換と移動を組み合わせると２）の範囲の変換になります。 </para><!--rule (<hr>) is not applicable to DocBook--></section><section><title>１次変換と移動を同じ計算で行う方法</title><para>点（ｘ、ｙ）を３次元のベクトル <inlinemediaobject><imageobject><imagedata fileref="http://ei-www.hyogo-dai.ac.jp/~masahiko/moin.cgi/%E5%A4%89%E6%8F%9B?action=AttachFile&amp;do=get&amp;target=transform2.png"/></imageobject><textobject><phrase>transform2.png</phrase></textobject></inlinemediaobject> で表すことにします。 </para><para>１次変換は <inlinemediaobject><imageobject><imagedata fileref="http://ei-www.hyogo-dai.ac.jp/~masahiko/moin.cgi/%E5%A4%89%E6%8F%9B?action=AttachFile&amp;do=get&amp;target=transform3.png"/></imageobject><textobject><phrase>transform3.png</phrase></textobject></inlinemediaobject> になります。 </para><para>移動は <inlinemediaobject><imageobject><imagedata fileref="http://ei-www.hyogo-dai.ac.jp/~masahiko/moin.cgi/%E5%A4%89%E6%8F%9B?action=AttachFile&amp;do=get&amp;target=transform4.png"/></imageobject><textobject><phrase>transform4.png</phrase></textobject></inlinemediaobject> で表せます。 </para><!--rule (<hr>) is not applicable to DocBook--><para> transformとの対応 </para><para>行列の掛け算に対応するので右から順に処理されるのが分ります。 </para><para>変換行列を与えてtransformを行うこともできます。 </para><para>transform=matrix(a,b,c,d,e,f) </para><para>と書くと <inlinemediaobject><imageobject><imagedata fileref="http://ei-www.hyogo-dai.ac.jp/~masahiko/moin.cgi/%E5%A4%89%E6%8F%9B?action=AttachFile&amp;do=get&amp;target=transform5.png"/></imageobject><textobject><phrase>transform5.png</phrase></textobject></inlinemediaobject> の変換行列になります。 </para></section></section></article>