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:
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 {
}
}
}
}
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