みなさんこんにちは。いいんちょです。

私の職場では多種多様なプリンタへ可変情報を出力するためにレイアウト編集ソフトを使用しているのですが、そのレイアウト編集ソフトが開発中止となると急いで次のソフトを探す必要があります。ソフトを探す中で、やりたいこととやれること、費用など全ての要望を叶えるソフトはなかなか無く、じゃあ自分で作ればバタバタする必要なくない?って思いで今回も安易に制作に踏み切ります。^^;

ただ、印刷品質に耐えうるレイアウト編集ソフトを作成できるほどのスキルは無いため、まずは商品表示用などに使用できるラベルデザインソフトを目指すこととします。自作なので自分が欲しい機能は盛り込み、使わない機能は省き、かなりトヨトモ基準なソフトになりつつありますが、現在もあれこれ壁にぶつかりながら時間を見つけこつこつ制作しています。

そのあれこれの中でテキストや画像の回転について「アフィン変換」を多用したのでちょっとご紹介。アフィン変換とはある座標値が平行移動、回転、拡大・縮小等した後の座標値を取得できる便利な数式です。

例えば座標値(x,y)で座標値(Px,Py)を原点としθ度回転した後の座標値(x’,y’)を取得する計算式は

原点を(0,0)とするならばこの公式のみで計算できます。

数式を眺めて理解するより、いつも通りExcelのVBAでマクロを組んで実際の動きを体感して理解することにします。

まずいつもの「あ」をExcelのセルに配置。回転の原点を赤ベタのセル(33,33)とします。「あ」の特定のセルの座標を上記関数に当てはめ、結果の座標値のセルにコピペするマクロを作成。

VBAのCos、Sin関数の引数はラジアンのため、πをpi、ラジアンをrd、回転角度をr、元座標を(x,y)、原点座標を(px,py)、結果の座標を(rx,ry)とすればこんな感じ。

そのマクロを90度、180度、270度の角度で実行します。

かんたんな計算式で画像の回転が可能ですね。

ただ、指定する角度によっては算出されない座標値が発生し、穴あきの状態になることがあります。(下画像は135度回転)

この場合は逆行列を使用し、回転後の座標値から元の座標値を取得する方法で算出します。

そのアフィン変換を使用すると、ラベル編集画面でテキストを回転させることはもちろん、

オブジェクトをグループ化して回転するときの座標値の取得、

円グラフやレーダーチャートの作成にも役立ちました。

行列の計算なんて、数十年ぶりで昔の知識を引っ張り出すのに苦労しましたが^^;、とりあえずそれっぽいデザインソフトになってきたとは思います。

その他、あれやこれなどまた機会があれば記事にしたいと思います。(*´∀`*)

以上、いいんちょでした。

この記事を書いた人

いいんちょ
トヨトモHP管理委員会の委員長を任されています、いいんちょです。みなさんにトヨトモの魅力を知って頂けるよう、商品情報から活動報告まで、肩の力を抜いて読んで頂けるブログを目指します。