/* -*- coding: utf-8 -*- */ import java.awt.BorderLayout; import java.awt.Graphics; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.Timer; import demo1.PixelImageRGB; import demo1.Mat4; import demo1.Vec4; /** * @author nieminen * Main program for some quick experiments with the example library. */ public class Demo1 { private static PixelImageRGB im = new PixelImageRGB(600, 400); private static JFrame frame; private static TestAnim1 anim; /** * @param args */ public static void main(String[] args) { experimentWithMatrices(); funnyAnimationKindaThingy(); } /* Tässä on joitakin kokeiluja, joissa katsotaan että tietyt tulosteet * vastaavat odotettuja. Tietysti täydellisessä maailmassa tehtäisiin * täydelliset yksikkötestit.. */ private static void experimentWithMatrices() { System.out.println("Identity:"); Mat4 hmm = Mat4.buildIdentity(); hmm.prettyPrint(System.out); System.out.println("Random:"); hmm = Mat4.buildRandom(-2.0,2.0); hmm.prettyPrint(System.out); System.out.println("Transpose:"); hmm.transp(); hmm.prettyPrint(System.out); System.out.println("Unit vector along z axis:"); Vec4 v1 = new Vec4(1,0,0,0); Vec4 v2 = new Vec4(0,1,0,0); Vec4 v3 = Vec4.cross3(v1, v2); v3.prettyPrint(System.out); } private static void funnyAnimationKindaThingy() { frame = new JFrame(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(500, 400); frame.getContentPane().add(new MyGraphicsPanel(im), BorderLayout.CENTER); anim = new TestAnim1(frame, im); Timer timer = new Timer(20, anim); timer.setInitialDelay(40); timer.start(); frame.setVisible(true); } } /** An ad hoc animation .. */ class TestAnim1 implements ActionListener { private float param = 0.0f; private JFrame frame; private PixelImageRGB im; public TestAnim1(JFrame fr, PixelImageRGB im) { frame = fr; this.im = im; } private void updateScene() { im.testImage(); for (int i=0;i<100;i+=5){ double tx = i*Math.cos(param); double ty = i*Math.sin(param); im.setPixel((int)(100+tx), (int)(100+ty), (float) 1.0, (float) 0.8, (float) 0.2); } } @Override public void actionPerformed(ActionEvent arg0) { param += 0.01; updateScene(); frame.repaint(); } } class MyGraphicsPanel extends JPanel { private static final long serialVersionUID = 1L; private PixelImageRGB im; MyGraphicsPanel(PixelImageRGB im) { this.im = im; } public void paint(Graphics g) { g.drawImage(im.asBufferedImage(), 0, 0, null); } }