Skip to content Skip to sidebar Skip to footer

Pertemuan 8 TRANSFORMASI 2D PART 1 MATRIKS DAN TRANSFORMASI GEOMETRI

PERTEMUAN 8


Pada penulisan artikel ini berdasarkan tugas elerning mata kuliah komputer grafik materi tentang matriks dan transformasi, pada saat penulisan ini kegiatan kuliah digantikan dengan elerning karna sedang ada pandemi virus corona.

Untuk mengerjakan tugas ini saya disarankan dosen untuk mengunakan software netbeans. Bebas mau versi berapa saja namun saya sendiri mengunakan versi yang 2.8.

Baik langsung saja ke tugas yang di berikan oleh dosen saya yaitu:

Transformasi Geometri 2D - Rotasi

Silakan Anda coba untuk diskusikan mengenai Transformasi Geometri untuk Rotasi.

Berikan contoh code nya dan tampilkan pada objek Anda


Berikut Source Code nya :



/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package Elerning;

/**
 *
 * @author lenovo
 */
import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;
import java.util.*;
import javax.swing.*;

public class Rotasii extends JFrame {

public static void main(String[] args)
{
new Rotasii(); 
}

public Rotasii() {
this.setTitle("Elerning Pertemuan 8 ROTASI");
this.setSize(500, 500); 
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.add(new PaintSurface(), BorderLayout.CENTER);
Thread t = new AnimationThread(this); 
t.start();
this.show();
}

}


class AnimationThread extends Thread {
JFrame c;

public AnimationThread(JFrame c){
this.c = c;
}

public void run(){
while(true){
c.repaint(); 
try{
Thread.sleep(30); 
}
catch(InterruptedException ex){
}
}

}
}
class PaintSurface extends JComponent{
double x_pos = 100;
double y_pos = 100;
int rotation = 0;
double angle = 0;

public void paint(Graphics g){
Graphics2D g2 = (Graphics2D)g; 
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
if(rotation == 360) {
rotation = 0;
}
else {
rotation += 20; 
angle -= 0.05;
x_pos = 100*Math.cos(angle)+150; 
y_pos = 100*Math.sin(angle)+150;
}

Shape ball = new Ellipse2D.Float((int)x_pos,(int)y_pos, 70, 30); 
g2.rotate(Math.toRadians(rotation), x_pos + 50/2, y_pos + 20/2); 
g2.setColor(Color.BLUE); 
g2.fill(ball); 
}

}


Transformasi Geometri 2D - Translasi
Silakan Anda coba untuk diskusikan mengenai Transformasi Geometri untuk Translasi.


Berikan contoh code nya dan tampilkan pada objek Anda

Berikut Source Code nya:


package Elerning;

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 *
 * @author lenovo
 */
import java.util.ArrayList;
import javafx.application.Application;
import static javafx.application.Application.launch;
import javafx.event.EventHandler;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.canvas.Canvas;
import javafx.scene.canvas.GraphicsContext;
import javafx.scene.image.Image;
import javafx.scene.input.KeyEvent;
import javafx.scene.input.MouseEvent;
import javafx.scene.paint.Color;
import javafx.stage.Stage;

/**
 *
 *
 *
 */
public class Translasi extends Application implements Runnable {
//Loop Parameters

    private final static int MAX_FPS = 60;
    private final static int MAX_FRAME_SKIPS = 5;
    private final static int FRAME_PERIOD = 1000 / MAX_FPS;
//Thread
    private Thread thread;
    private volatile boolean running = true;
//Canvas
    Canvas canvas = new Canvas(1024, 700);
//KEYBOARD HANDLER
    ArrayList inputKeyboard = new ArrayList();
//ATRIBUT KOTAK
    float sisi = 100f;
    float sudutRotasi = 0f;
    float cx = 100;
    float cy = 0;

//ATRIBUT GJB
    float g = 0.1f;
    float t = 0f;
    float v = 0f;
    float vUP = 10f;
    private int yo;

    public Translasi() {
        resume();

    }

    @Override
    public void start(Stage primaryStage) {
        Group root = new Group();
        Scene scene = new Scene(root);
        root.getChildren().add(canvas);
//HANDLING KEYBOARD EVENT
        scene.setOnKeyPressed(
                new EventHandler() {
            public void handle(KeyEvent e) {
                String code = e.getCode().toString();
                if (!inputKeyboard.contains(code)) {
                    inputKeyboard.add(code);
                    System.out.println(code);
                }
            }
        }
        );
        scene.setOnKeyReleased(
                new EventHandler() {
            public void handle(KeyEvent e) {
                String code = e.getCode().toString();
                inputKeyboard.remove(code);
            }
        }
        );
//HANDLING MOUSE EVENT
        scene.setOnMouseClicked(
                new EventHandler() {
            public void handle(MouseEvent e) {
            }
        }
        );
        //primaryStage.getIcons().add(new Image(getClass().getResourceAsStream("logo.jpg")));
        primaryStage.setTitle("ELERNING TRANSLASI");
        primaryStage.setScene(scene);
        primaryStage.show();

    }

    public static void main(String[] args) {
        launch(args);
    }
//THREAD

    private void resume() {
        reset();
        thread = new Thread(this);
        running = true;
        thread.start();
    }
//THREAD

    private void pause() {
        running = false;
        try {
            thread.join();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
//LOOP

    private void reset() {
    }
//LOOP

    private void update() {
        if (inputKeyboard.contains("RIGHT")) {
            cx += 2;//Menggerakkan kotak ke kanan saat Key cx+2=2;
        } else if (inputKeyboard.contains("LEFT")) {
            cx -= 2;//Menggerakkan kotak ke kiri saat cx-=2;
        }
        if (inputKeyboard.contains("UP")) {
            cy -= 2;//Menggerakkan kotak ke atas saat Key UP cy-=2;
        } else if (inputKeyboard.contains("DOWN")) {
            cy += 2;//Menggerakkan kotak ke bawah saat cy+=2;
        }
        if (inputKeyboard.contains("R")) {
            sudutRotasi += 2;//Merotasi Kotak se arah gerakan jarum jam sudutRotasi+=2;
        }
       
    }


private void draw() {
        try {
            if (canvas != null) {
                GraphicsContext gc = canvas.getGraphicsContext2D();
                gc.clearRect(0, 0, canvas.getWidth(), canvas.getHeight());
//CONTOH MENGGAMBAR KOTAK YANG DAPAT DITRANSLASI DAN DI ROTASI
                gc.save();
                gc.translate(cx, cy);
                gc.rotate(sudutRotasi);
                gc.setFill(Color.PURPLE);
                gc.fillRect(-0.5f*sisi, -0.5f*sisi, sisi, sisi);
                gc.restore();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Override
    public void run() {
        long beginTime;
        long timeDiff;
        int sleepTime = 0;
        int framesSkipped;
//LOOP WHILE running = true;
        while (running) {
            try {
                synchronized (this) {
                    beginTime = System.currentTimeMillis();
                    framesSkipped = 0;
                    update();
                    draw();
                }
                timeDiff = System.currentTimeMillis() - beginTime;
                sleepTime = (int) (FRAME_PERIOD - timeDiff);
                if (sleepTime > 0) {
                    try {
                        Thread.sleep(sleepTime);
                    } catch (InterruptedException e) {
                    }
                }
                while (sleepTime < 0 && framesSkipped < MAX_FRAME_SKIPS) {
                    update();
                    sleepTime += FRAME_PERIOD;
                    framesSkipped++;
                }
            } finally {
            }
        }
    }
}


Pertemuan 8 TRANSFORMASI 2D PART 1 MATRIKS DAN TRANSFORMASI GEOMETRI

itulah hasil dari elerning pertemuan 8 mata kuliah komputer grafik tentang membuat rotasi dan translasi.


Silahkan kembangkan lagi untuk membuat grafik yang lebih menarik lagi dan lebih keren, karna saya itu hanya membuat basic nya saja hanya mengejar gampang dan cepat saja.

Karna dalam pengerjaan nya memang terbatas dalam waktu nya, makanya daripada ga ngumpulin mendig ngumpulin sejadi nya saja.

Demikian artikel ini jika ada salah kata saya mohon maaf dan jika masih kurang jelas silahkan ditanyakan di kolom komentar.

Sekian dan terimakasih

Berlangganan via Email