IKG3H2 Computer Graphics - Simulation...

20
IKG3H2 Computer Graphics Gnuplot for scientific computing DR. PUTU HARRY GUNAWAN

Transcript of IKG3H2 Computer Graphics - Simulation...

IKG3H2

Computer GraphicsGnuplot for scientific computingDR. PUTU HARRY GUNAWAN

Info penting!

Keputusan, setelah UTS sampai akhir UAS, mata kuliah ini akan tetap

mempelajari GNUPLOT dan C/C++. Bertujuan untuk memperdalam/

memfokuskan visualisasi sains dengan GNUPLOT dan review C/C++

dalam minimal pemodelan sederhana tanpa proses numerik.

Serta mengurangi proses mahasiswa dalam mempelajari Software

lain yang terlalu banyak. Sehingga tidak memerlukan proses

instalasi software dan proses belajar awal penggunaan Software.

Sampai UAS, proses belajar mahasiswa dalam bentuk kelompok

(Max 3 orang).

UAS berupa presentasi final project dihadapan (Max tiga dosen) langsung dalam waktu max 20 menit.

Next

1. Solving Problems (Mid-Term

Exam)

Soal A 1

Sebuah mobil bergerak melalui jalan yang menanjak dan menurun

menyerupai sebuah grafik sinusoidal seperti pada gambar di

bawah ini:

Soal A 1

Jika diketahui domain pengamatan Ω = [−200 : 1200] km, maka:

a) Tentukanlah fungsi f(x) = sin(?/?) seperti gambar diatas!

b) Buatlah gambar seperti Figure 1 di atas dengan posisi dan jeniskendaraan bebas (anda bisa improve sendiri, dalam hal ini bisamenggunakan gambar mobil atau motor)! Gunakan syntaxberikut untuk menampilkan gambar kedalam gnuplot:

plot "car.jpeg" binary filetype=jpg center=(250,225) with rgbimagenotitle

c) Buatlah simulasi untuk pergerakan sebuah kendaraan yang melaluidaerah yang telah didefinisikan! (Jika memungkinkan, gambarkendaraan diharapkan bisa menukik ke bawah atau keatas jika sedang berada di turunan atau tanjakan).

Solusi A 1 bagian a

Fungsi jalannya adalah

𝑓 𝑥 = 100 sin𝜋𝑥

500+ 100

Solusi A 1 bagian c

Seperti biasa kita perlukan syntax basic untuk C/C++

#include <stdio.h>

#include <math.h>

int main()

//Write code Here

return 0;

Solusi A 1 bagian c

Selanjutnya, kita definisikan domain beserta fungsi

jalan

#include <stdio.h>

#include <math.h>

int main()

double Nx= 1400; double dx=1;

double* x= new double[Nx+1];

double* y= new double[Nx+1];

for(int i=1; i<=Nx; i++)

x[i]=i*dx -200;

y[i]=sin(3.14*x[i]/500)*100+100;

return 0;

Domain Ω = −200: 1200 , berarti kita

memiliki panjang jalur

L = 1200 − −200 = 1400

Jika kita mendiskritkan domain

sebesar dx=1 kita akan punya

banyak titik sebanyak

𝑁𝑥 =𝐿

𝑑𝑥=1400

1= 1400

Exercise

Plot the x and y functions!

Solusi A 1 bagian c

Untuk mensimulasikan benda bergerak, kita perlu definisikan loop

while/for seperti pada slide kuliah sebelumnya.

#include <stdio.h>

#include <math.h>

int main()

. . . . .

for(int i=1; i<=Nx; i++)

x[i]=i*dt -200;

y[i]=sin(3.14*x[i]/500)*100+100;

int Nt=Nx;

for(int waktu=1; waktu <=Nt; waktu++)

//Plot the figure

return 0;

Untuk mebuat simulasi mobil

bergerak per detik per titik diskrit,

maka diperlukan step waktu untuk

memvisualkan mobil. Dengan

memilih

𝑁𝑡 = 𝑁𝑥

Solusi A 1 bagian c Bagaimana cara plot mobil??

FILE* pipe = popen("gnuplot", "w");

if (pipe != NULL)

fprintf(pipe, "reset\n");

fprintf(pipe, "set xrange[-200:1200]\n");

fprintf(pipe, "set yrange[0:600]\n");

fprintf(pipe, "plot 'car.jpeg' binary filetype=jpg center=(%g,%g) with rgbimage

notitle, '-' with lines lw 3 notitle\n",x[waktu],y[waktu] +50);

for(int i=1; i<=Nx; i++)

fprintf(pipe,"%g %g\n",x[i],y[i]);

fprintf(pipe,"end\n");

fprintf(pipe, "pause 0.5\n");

fflush(pipe);

else puts("Could not open the file\n");

pclose(pipe);

Untuk menghasilkan gambar yang bergerak

tentunya kita harus mengatur posisi tengah

gambar sesuai dengan waktu jalan,

dikarenakan step waktu = step spasial (lihatwarna kuning). (50 digunakan untuk

mengatur ketinggian gambar).

Supaya jalan tetap terlihat, Kurva y, harus

tetap ditampilkan tiap detik waktu, maka

tambahkan syntax setelahnya (lihat warna

merah).

Hasil 1

Solusi A 1 bagian c

Bagaimana cara mobil bisa menukik naik turun sesuai dengan

kondisi jalan?

Note: Untuk membuat mobil menukik kebawah atau keatas, kitaperlu pengetahuan yakni arah kepala mobil harus sesuai dengan

arah gradient dari kurva.

Gradiennya 0

Solusi A 1 bagian c

Jadi untuk mentukan arah kepala mobil perlu gradient

dari 𝑓 𝑥 yaitu

𝑑𝑓 𝑥

𝑑𝑥= 𝑓′ 𝑥 =

100 𝜋

500cos

𝜋𝑥

500

Selanjutnya perlu perbaikan di bagian program

Solusi A 1 bagian c Modifikasi tambahan variabel

#include <stdio.h>

#include <math.h>

int main()

double Nx= 1400;

double* x= new double[Nx+1];

double* y= new double[Nx+1];

double* Grady= new double[Nx+1];

for(int i=1; i<=Nx; i++)

x[i]=i*dt -200;

y[i]=sin(3.14*x[i]/500)*100+100;

Grady[i]=100*3.14*cos(3.14*x[i]/500)/500;

. . . .

return 0;

Tambahkan variabe baru yakni

Grady sebagai fungsi untuk rotasi

kepala mobil

Solusi A 1 bagian c Modifikasi bagian Plot

fprintf(pipe, "plot 'car.jpeg' binary filetype=jpg center=(%g,%g) rotation=%g with rgbimage

notitle, '-' with lines lw 3 notitle\n",x[waktu],y[waktu] +50, Grady[waktu]);

Modifikasi di bagian plot sangatlah

sederhana, hanya menambahkan syntax

rotation dengan besarannya senilai dengan

variable Grady (lihat warna merah).

Hasil 2

Exercise

Buatlah laporan dengan detail (Berkelompok) untuk memecahkan

kasus yang ada di soal UTS Tipe A soal 3

Buat laporan sedetail mungkin jelaskan dengan kata2 sendiri.

Dikumpul laporan hardcopy, serta Softcopy laporan dan Program

lengkap dengan hasilnya yaitu videonya saja yang diupload di

Gdrive.

Thank you