ikg3h2 computer graphics - simulation...
TRANSCRIPT
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.
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 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
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).
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).
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.