プログラマメモ2 - programmer no memo2

表現方法を模索中 - AffineTransformを使ってみる。 2008/05/08

動機


情報の可視化で、何かいい感じの表現ができないか模索。

以前から気になっていた表現方法をJavaでできないかちょっと試してみました。

どういうことかといいますと、下記のようなべた2Dなのですが、これを奥行きがあるように表現するって感じです。


下記のような感じにしたい。

適当にイラストレーターで作ったので、ちょっと変ですが...
ニュアンスが伝わるかどうか不安です。

専門的には、何というのでしょうか。

Patent Draftsmen: 斜視図と透視図
投影図 - Wikipedia
等角投影法なんて書き方忘れたよ。 (トモログ)

結果


AffineTransformを使ってみました。
shearというメソッドを使ってます。
[ 1 shx 0 ]
[ shy 1 0 ]
[ 0 0 1 ]

この辺よくわかってないので、要勉強です。



以下、コード
package affinetransform;

import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.AffineTransform;
import java.awt.image.BufferedImage;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.JFrame;
import javax.swing.JPanel;


public class Test {

public static void main(String[] args) throws IOException {
a();
}

static void a() throws IOException{

final BufferedImage image = ImageIO.read(Test.class.getResource("a.png"));
final AffineTransform affineTransform = new AffineTransform();

affineTransform.shear(0, .5);

class P extends JPanel {

@Override
protected void paintComponent(Graphics g) {
Graphics2D g2d = (Graphics2D)g;
g2d.drawImage(image, affineTransform, null);

}

}

JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(new P());
frame.setVisible(true);

}

}

: