表現方法を模索中 - AffineTransformを使ってみる。
2008/05/08
java
画像
表現方法
動機
情報の可視化で、何かいい感じの表現ができないか模索。
以前から気になっていた表現方法を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);
}
}
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);
}
}
: