2019年2月3日: Virtuoso、orient の定義と合成のまとめ
2019年2月3日 19時27分
Virtuoso オブジェクトで使われるオブジェクトの配置の仕方を指定する orient
の定義とその合成をまとめた。${\tt MXR90}$ の定義とかよく忘れるし、合成についてはいつも分かんなくなるから。
定義
$$ {\tt R0}=\left( \begin{matrix} 1 & 0\newline 0 & 1 \end{matrix} \right) $$ | $$ {\tt MX}=\left( \begin{matrix} 1 & 0\newline 0 & -1 \end{matrix} \right) $$ |
$$ {\tt R90}=\left( \begin{matrix} 0 & -1\newline 1 & 0 \end{matrix} \right) $$ | $$ {\tt MXR90}=\left( \begin{matrix} 0 & 1\newline 1 & 0 \end{matrix} \right) ={\tt R90}\bullet{\tt MX} $$ |
$$ {\tt R180}=\left( \begin{matrix} -1 & 0\newline 0 & -1 \end{matrix} \right) $$ | $$ {\tt MY}=\left( \begin{matrix} -1 & 0\newline 0 & 1 \end{matrix} \right) $$ |
$$ {\tt R270}=\left( \begin{matrix} 0 & 1\newline -1 & 0 \end{matrix} \right) $$ | $$ {\tt MYR90}=\left( \begin{matrix} 0 & -1\newline -1 & 0 \end{matrix} \right) ={\tt R90}\bullet{\tt MY} $$ |
合成
二つの変換を合成する。「$左項\bullet右項$」の形で。
この集合に含まれる写像はどれでも合成後のものはこの集合自身に含まれる。数学的に言えば、orient
の集合は「$\bullet$」合成に関して群を成してる。行列を真面目に計算せずに、この表から直接答えを検索するだけでいい。
右項 | |||||||||
---|---|---|---|---|---|---|---|---|---|
${\tt R0}$ | ${\tt R90}$ | ${\tt R180}$ | ${\tt R270}$ | ${\tt MX}$ | ${\tt MXR90}$ | ${\tt MY}$ | ${\tt MYR90}$ | ||
左項 | ${\tt R0}$ | ${\tt R0}$ | ${\tt R90}$ | ${\tt R180}$ | ${\tt R270}$ | ${\tt MX}$ | ${\tt MXR90}$ | ${\tt MY}$ | ${\tt MYR90}$ |
${\tt R90}$ | ${\tt R90}$ | ${\tt R180}$ | ${\tt R270}$ | ${\tt R0}$ | ${\tt MXR90}$ | ${\tt MY}$ | ${\tt MYR90}$ | ${\tt MX}$ | |
${\tt R180}$ | ${\tt R180}$ | ${\tt R270}$ | ${\tt R0}$ | ${\tt R90}$ | ${\tt MY}$ | ${\tt MYR90}$ | ${\tt MX}$ | ${\tt MXR90}$ | |
${\tt R270}$ | ${\tt R270}$ | ${\tt R0}$ | ${\tt R90}$ | ${\tt R180}$ | ${\tt MYR90}$ | ${\tt MX}$ | ${\tt MXR90}$ | ${\tt MY}$ | |
${\tt MX}$ | ${\tt MX}$ | ${\tt MYR90}$ | ${\tt MY}$ | ${\tt MXR90}$ | ${\tt R0}$ | ${\tt R270}$ | ${\tt R180}$ | ${\tt R90}$ | |
${\tt MXR90}$ | ${\tt MXR90}$ | ${\tt MX}$ | ${\tt MYR90}$ | ${\tt MY}$ | ${\tt R90}$ | ${\tt R0}$ | ${\tt R270}$ | ${\tt R180}$ | |
${\tt MY}$ | ${\tt MY}$ | ${\tt MXR90}$ | ${\tt MX}$ | ${\tt MYR90}$ | ${\tt R180}$ | ${\tt R90}$ | ${\tt R0}$ | ${\tt R270}$ | |
${\tt MYR90}$ | ${\tt MYR90}$ | ${\tt MY}$ | ${\tt MXR90}$ | ${\tt MX}$ | ${\tt R270}$ | ${\tt R180}$ | ${\tt R90}$ | ${\tt R0}$ |
関連するAPI関数
orient
($O$)はアフィン変換の一部として、変位($\vec{d}$)と 拡大倍率($\alpha$)の情報と一緒に使われる。アフィン変換(transform
)のデータ形式はリストでこの通り。
$${\tt(}\vec{d}\ \ O\ \ \alpha{\tt)}$$
この形式のデータが次のアフィン変換 $T(\vec{r})$ に対応する。
$$T(\vec{r})=\alpha\cdot\left(O\ \vec{r}+\vec{d}\right)$$
んで、transform
に関係する関数は次の通り。
関数 | 機能 |
---|---|
(dbTransformPoint point transform)
|
点 point を変換 transform した点を求めて返す。
|
(dbTransformBBox rectangle transform)
|
矩形 rectangle を変換 transform した矩形を求めて返す。
|
(dbConcatTransform transformformer transformlatter)
|
変換 transformformer に続く transformlatter を合成した変換($transform_{latter}\bullet{}transform_{former}$)を求めて返す。
|
逆元
面白いのは ${\tt R90}$ と ${\tt R270}$ 以外は逆元が自分自身だということ。
$orient$ | $orient^{-1}$ | 備考 |
---|---|---|
${\tt R0}$ | ${\tt R0}$ | ${\tt R0}$ は単位元だから当たり前。 |
${\tt R90}$ | ${\tt R270}$ | |
${\tt R180}$ | ${\tt R180}$ | |
${\tt R270}$ | ${\tt R90}$ | |
${\tt MX}$ | ${\tt MX}$ | |
${\tt MXR90}$ | ${\tt MXR90}$ | $\begin{eqnarray}{\tt MXR90}^{-1}&=&\left({\tt R90}\bullet{\tt MX}\right)^{-1}\newline&=&{\tt MX}^{-1}\bullet{\tt R90}^{-1}\newline&=&{\tt MX}\bullet{\tt R270}\newline&=&{\tt MXR90}\end{eqnarray}$ |
${\tt MY}$ | ${\tt MY}$ | |
${\tt MYR90}$ | ${\tt MYR90}$ | $\begin{eqnarray}{\tt MYR90}^{-1}&=&\left({\tt R90}\bullet{\tt MY}\right)^{-1}\newline&=&{\tt MY}^{-1}\bullet{\tt R90}^{-1}\newline&=&{\tt MY}\bullet{\tt R270}\newline&=&{\tt MYR90}\end{eqnarray}$ |