Anda di halaman 1dari 3

SIMULASI IK MENGGUNAKAN PROCESSING

Nama : Muhammad Yoga Pranata


Nim : 180536633050
1. Analisis List Program
//Program Base Arm Robot
//Muhammad Yoga Pranata 180536633050
//S1TE 2018

PFont f; //Membuat sebuah font yang dimasukkan di variabel f


float a1 = 300; //Mendeklarasikan variabel al dengan tipe data float yang bernilai
300
int Xoffset = 425; //Mendeklarasikan variabel Xoffset dengan tipe data integer yang
bernilai 425
int Yoffset = 425; //Mendeklarasikan variabel Yoffset dengan tipe data integer yang
bernilai 425

float theta1; //Mendeklarasikan variabel thetal dengan tipe data float


float shoulderX; //Mendeklarasikan variabel X dengan tipe data float
float shoulderY; //Mendeklarasikan variabel Y dengan tipe data float
void setup() {
size(850, 650, P3D); //Menampilkan layar kerja / background dengan ukuran Panjang
= 850 dan Lebar = 650
background(157, 6, 50); //Memberikan warna background dengan format r, g, b = 157,
6, 50
f = createFont("Montserrat", 16, true); //Mengatur jenis font, ukuran font dan status font
didalam variabel f
}

void draw() {
background(123, 82, 171); //Memberikan warna background garis dengan format r, g,
b = 123, 82, 171
strokeWeight(8); //Mengatur ketebalan garis ukuran 8
rotateX(PI); // Perintah untuk memutar sudut X sebesar 180 derajat
translate(Xoffset, -Yoffset); //Mentranslansikan nilai pada variabel Xoffset dan Yoffset

get_angles(mouseX-Xoffset, -mouseY+Yoffset); //Perintah untuk memanggil void


get_angles()
get_xy(); //Perintah untuk memanggil void get_xy()
print("Pointer "); //Menampilkan label Pointer kedalam layar kerja
print(mouseX-Xoffset); //Menampilkan nilai Xoffset
print(','); //Mencetak karakter koma (,) ke layar kerja
println(-mouseY+Yoffset); //Menampilkan nilai Yoffset
delay(5); //memberikan jeda / delay sebesar 5 milisecon

if (shoulderX < 0) { //Perintah seleksi kondisi jika nilai shoulderX kurang dari 0
maka sholuderX pasti bernilai 0
shoulderX = 0;
}
if (theta1 > 90) { //Perintah seleksi kondisi jika nilai thetal lebih besar dari 90 maka
thetal pasti bernilai 90
theta1 = 90;
line(0.0, 0.0, 300, 0); //Batas maksimal panjang garis ketika thetal bernilai lebih besar
dari 90
} else if (theta1 < -90) { //Perintah seleksi kondisi jika nilai thetal kurang dari -90 maka
thetal pasti bernilai -90
theta1 = -90;
line(0.0, 0.0, -300, 0); //Batas maksimal panjang garis ketika thetal bernilai kurang dari
-90
}

line(0.0, 0.0, shoulderY, shoulderX); //Menggambar garis dengan format ukuran x1,
y1, x2, y2 = 0.0, 0.0, shoulderY, shoulderX
strokeWeight(10); //Mengatur ketebalan garis ukuran 10

textFont(f); //Mengatur font sesuai baris ke 16


fill(0); //Memberikan warna kosong/tidak ada warna
scale(1, -1); //Menentukan skala teks dengan ukuran 1:1
text("Angle " + nf(theta1, 1, 2), -50, 20); //Menampilkan sudut berdasarkan pergerakan
garis
text("Pointer X : " + str(mouseX-Xoffset) + " Y : " + str(mouseY-Yoffset), -80, 40);
//Menampilkan posisi koordinat berdasarkan pergerakan mouse
}

void get_angles(float Px, float Py) {


theta1 = degrees(atan2(Px, Py)); // Rumus invers kinematik yang dimasukkan pada
variabel thetal
print("Angle "); //Mencetak label Angle kedalam layar kerja
println((int)theta1); //Menampilkan nilai theta1 kedalam layar kerja
}

void get_xy() {
//FK (Forward Kinematics)
shoulderX = a1*cos(radians(theta1)); //Rumus atau persamaan untuk menentukan nilai
dari shoulderX
shoulderY = a1*sin(radians(theta1)); //Rumus atau persamaan untuk menentukan nilai
dari shoulderY

print("Length "); //Mencetak label Length kedalam layar kerja


print((int)shoulderX); //Menampilkan nilai yang terdapat pada variabel shoulderX
print(" "); //Menampilkan karakter spasi
println((int)shoulderY); //Menampilkan nilai yang terdapat pada variabel shoulderY
dalam baris yang sama
}

2. Screenshoot Running Program

Anda mungkin juga menyukai