BAB-4
LINGKARAN dan ELIPS
Pada materi kali ini kita akan membahas tentang algoritma pembentuk lingkaran dan elips
4.1. LINGKARAN
Algoritma bressenham dapat diterapkan untuk menggambar sebuah lingkaran. Untuk menggambar lingkaran hanya diperlukan menggambar titik-titik pada oktan pertama saja sedangkan titik-titik pada kuadran lain dapat diperolah dengan mencerminkan titik-titik pada kuadran pertama.
Dapat disimpulkan bahwa jika algoritma bresenham bekerja mulai dari (x=0, y=R) searah jarum jam, maka y merupakan fungsi menurun dari x, demikian juga sebaliknya, jika dimulai dari (y=0, x=R) maka x akan merupakan fungsi menurun dari y.
1. Masukkan jari-jari dan pusat lingkaran (xc,yc) dan dapatkan titik permulaan pada keliling yang berpusat pada titik awal sebagai:(x0 , y0) = (0,r)
2. Hitung nilai awal parameter keputusan sebagaiP0 = 5/4 – r
3. Pada masing-masing posisi xk, mulai dari k=0, lakukan tes berikut jika pk <0, titik berikut sepanjang lingkaran yang berpusat (0,0) adalah (xk+1,yk) dan selain itu, titik berikutnya untuk lingkaran adalah (xk + 1, yk – 1) dan dengan 2xk+1 = 2xk+2 dan 2yk+1 = 2yk – 2
4. Tentukan titik simetri untuk 7 oktan yang lain.
5. Pindahkan masing-masing posisi piksel (x,y) ke bagian lingkaran yang berpusat ke (xc,yc) dan lukis nilai koordinat.
6. Ulangi langkah 3 sampai 5 hingga x>= y.
MIDPOINT
Algoritma midpoint disebut juga algoritma lingkaran Bresenham. Algoritma ini hanya memperhatikan bagian 45 drajat dari suatu lingkaran.
Algoritma Lingkaran Midpoint
Void CircleMidPoint(int Xcenter, int Ycenter, int Radius)
{
X = 0;
Y = Radius;
P = 1-Radius;
While (X<Y)
{
X = X+1;
If (P < 0 )
P = P+ 2*X+1;
Else {
Y = Y-1;
P = P + 2*(X-Y)+1;
}
}
CirclePlotPoints();
}
Void CirclePoints(Int X, Int Y, Int Value)
{
SetPixel(X,Y, Value);
SetPixel(-X,Y, Value);
SetPixel(X,-Y, Value);
SetPixel(-X,-Y, Value);
SetPixel(Y,X, Value);
SetPixel(-Y,X, Value);
SetPixel(Y,-X, Value);
SetPixel(-Y,-X, Value);
}
LATIHAN
Diketahui titik pusat lingkaran (0,0) dan radius 8, perhitungan berdasarkan oktan dari kuadran pertama dimana x = 0 sampai y = 0. Nilai parameter dapat ditentukan dengan.
P0 = 1 – r
= 1 – 8
= -7
Koordinat titik awal adalah (x,r) = (0,8)
Jawab:
X = 0
Y = r = 8
————————————————————–
K=0
P = 1 – r = 1 – 8 = -7
Loop ke-1
x = x +1 y tetap = 8
= 0 +1 = 1
—————————————————————
K=1
P = P + 2 * X + 1
= -7 + 2 * 1 + 1
= -4
Loop ke-2
x = x +1 y tetap = 8
= 1 +1 = 2
—————————————————————
K=2
P = P + 2 * X + 1
= -4 + 2 * 2 + 1
= 1
Loop ke-3
x = x +1 y = y-1
= 2 +1 = 3 = 8-1 = 7
—————————————————————
K=3
P = P + 2 * (X –Y) +1
= 1 + 2 * (3 – 7) + 1
= -6
Loop ke-4
x = x +1 y tetap = 7
= 3 +1 = 4
—————————————————————
K=4
P = P + 2 * X + 1
= -6 + 2 * 4 + 1
= 3
Loop ke-5
x = x +1 y = y-1
= 4 +1 = 5 = 7-1 = 6
—————————————————————
K=5
P = P + 2 * (X - Y) + 1
= 3 + 2 *(5 - 6) + 1
= 2
Loop ke-6
x = x +1 y = y-1
= 5 +1 = 6 = 6-2 = 5
—————————————————————
K=6
P = P + 2 * (X - Y) + 1
= 2 + 2 *(6 - 5) + 1
= 5
Loop berhenti karena x > y
Nilai dari penelusuran algoritma di tuliskan dalam tabel berikut:
| K | Pk | (xk+1,yk+1) oktan 1 |
| - | - | ( 0,8 ) |
| 0 | -7 | ( 1,8 ) |
| 1 | -4 | ( 2,8 ) |
| 2 | 1 | ( 3,7 ) |
| 3 | -6 | ( 4,7 ) |
| 4 | 3 | ( 5,6 ) |
| 5 | 2 | ( 6,5 ) |
4.2. ELIPS
Dengan sedikit memodifikasi algoritma lingkaran midpoint maka kita dapat membuat sebuah elips, dengan memasukkan nilai mayor dan nilai minor axis pada prosedur lingkaran.
Algoritma Elips Midpoint
Dalam membuat elips midpoint pendekaan yang dilakukan sama dengan menampilkan lingkaran. Metode elips dengan midpoint dijalanklan pada kuadran pertama. Bagian pertama berdasarkan kemiringan elips rx < ry. Bila slope < 1 maka penambahan steps pada arah sumbu x, dan bila kemiringan > 1 maka unit steps menurut sumbu y. Bagian 1 dan 2 dapat menggunakan bermacam cara, pertama dimulai dari posisi (0,ry) dan steps searah jarum jam sepanjang jalur elips. Pergerakan unit steps dalam x pada saat steps > 1.
Void ElipsMidPoint(Int xCenter,int yCenter,int Ex,int Ry,int P)
{ int Rx2 = Rx*Rx; int Ry2 = Ry*Ry;
int twoRx2 = 2*Rx2;
int TwoRy2 = 2*Ry2;
x = 0;
y = Ry;Int px = 0;
int py = twoRx2 * y;
//Bagian 1
P = Round(Ry2 – (Rx2 * Ry) + (0.25 * Rx2));
ElipsPlotPoints();
While (px < py )
{
X ++;
Px += twoRy2;
If (p<0)
P +=Ry2 + px;
Else
{
y- -;
py - = twoRx2;
p += Ry2 + px – py;
}
elipsPlotPoints();
}
}
//Bagian
2P = round(Ry2*(x+0.5)*(x+0.5)+Rx2*(y-1)*(y-1)– Rx2*Ry2);
While (y>0)
{
Y- -;
Py - =twoRx2;
If (p>0)
P + = Rx2 – py;
Else
{
X++;
Px += twoRy2;
P += Ry2 + px – py;
}
ElipsPlotPoints();
}
}
Void ElipsPlotPoints()
{
//Prosedur untuk menuliskan piksel
SetPixel(Xcenter + X, yCenter + Y);
SetPixel(Xcenter - X, yCenter + Y);
SetPixel(Xcenter + X, yCenter - Y);
SetPixel(Xcenter - X, yCenter - Y);
}
Latihan Elips
Diketahui titik pusat elips (0,0) dan mayor axis rx = 6, serta minor axis ry = 8, perhitungan berdasarkan pada kuadran pertama sebagai berikut. Nilai parameter dapat ditentukan. Koordinat titik awal adalah (x,r) = (0,8)
Dengan menggunakan algoritma elips maka hasilnya seperti pada tabel berikut:
| K | Pk | ( xk+1, yk+1 ) |
| - | - | ( 0,8 ) |
| 0 | -215 | ( 1,8 ) |
| 1 | -23 | ( 2,8 ) |
| 2 | 297 | ( 3,7 ) |
| 3 | 241 | ( 4,6 ) |
| 4 | -108 | ( 5,5 ) |
| 5 | 236 | ( 5,4 ) |
| 6 | -16 | ( 6,3 ) |
| 7 | 600 | ( 6,2 ) |
| 8 | 492 | ( 6,1 ) |
| 9 | 456 | ( 6,0 ) |
Ramalan bintang ini saya kutip dari situs: http://kalenderbali.org/index.php?bulan=2&tanggal=1&tahun=1927
Ramalan Bintang (Capricorn)
Berwatak suka dengan kebesaran, kekuasaan, dan memerintah. Anda seorang genius, pandai dan berpandangan luas. Harus ulet dalam melaksanakan tujuan untuk mencapai cita-cita yang tinggi dan mulia itu. Pasangannya Taurus dan Virgo.
Ramalan Bintang (Aquarius)
Berwatak jujur, kata-katanya bisa dipercaya, patut dijadikan sahabat tauladan. Untuk mencapai cita-cita yang luhur, anda harus rajin, ramah dan ringan tangan. Pasangannya Gemini, Libra.
Ramalan Bintang (Pisces)
Berwatak ramah dan tidak egoistis, namun kadang-kadang dalam hati nuraninya timbul pertentangan. Untuk mengejar kemajuan yang pesat anda harus cepat mengambil keputusan yang seimbang. Pasangannya Canser dan Scorpio.
Ramalan Bintang (Aries)
Berwatak kuat kepribadiannya serta pikirannya cerdas. Bisa menjadi sahabat yang baik dan setia. Untuk dapat mencapai tujuan yang luhur dan maksud yang mulia itu, harus berusaha dengan sungguh-sungguh dan rajin. Pasangannya Leo dan Sagitarius.
Ramalan Bintang (Taurus)
Berwatak agak keras kepala, jalan pikirannya sering bercabang, tetapi pandai bergaul serta bersifat jujur
terhadap sahabatnya. Agar sukses dalam kehidupan, harus berpendirian tetap dan berpandangan luas. Pasangannya Virgo dan Capricorn.
Ramalan Bintang (Gemini)
Berwatak gemar sekali dengan keindahan, namun tujuan hidupnya kadang-kadang tidak tetap. Oleh sebab itu anda harus memantapkan tujuan serta maksud hidup anda dengan membiasakan berlaku sabar tanpa dibayangi rasa bosan. Pasangannya Libra, Aquarius, dan Sagitarius.
Ramalan Bintang (Cancer)
Berwatak teguh mantap dalam pendirian maupun sikapnya. Suka berlaku hati-hati. Agar lebih maju anda harus memperluas cakrawala pergaulan dalam masyarakat. Anda sangat peka, tidak mudah melupakan segala peristiwa. Pasangannya Scorpio dan Pisces.
Ramalan Bintang (Leo)
Berwatak lebih bersifat emosional dibandingkan menggunakan pikiran sehingga seringkali terlibat problim percintaan. Anda harus berpikir lebih dahulu sebelum bertindak agar kehidupan bertambah cemerlang. Pasangannya Aries, Sagitarius, dan Aquarius.
Ramalan Bintang (Virgo)
Berwatak agak kurang merasa kasihan. Pembawaannya cerewet tetapi senang dengan hal-hal yang bersifat penyelidikan. Harus lebih banyak mengasihani agar dalam pergaulan merasa gembira. Pasangannya Libra, Scorpio, dan Capricorn.
Ramalan Bintang (Libra)
Berwatak mudah bergaul, ramah dan cinta perdamaian. Namun sangat gemar berfoya-foya. Anda harus memilih pekerjaan yang cocok dengan hobby anda supaya kehidupan anda benar-benar bermanfaat lahir batin. Pasangannya Aries, Aquarius, dan Gemini.
Ramalan Bintang (Scorpio)
Berwatak memiliki kepribadian yang berpengaruh. Dalam kehidupan bisa memiliki tingkat yang paling tinggi, namun bisa pula jatuh ke tempat yang paling rendah. Gemar urusan sosial, ulet, dan rajin. Pasangannya Pisces, Canser, dan Virgo.
Kalo ada ramalan bintangnya yang kurang, berati emang segitu aja…..
PEMANASAN GLOBAL Vs BUDAYA LOKAL
Pemanasan Global merupakan ulah manusia yang tidak memperhatikan keseimbangan alam, sehingga berakibat pada rusaknya tatanan lingkungan dan alam semesta ini. Apabila kita memperhatikan kearipan nilai-nilai yang diwariskan oleh leluhur kita niscaya pemanasan global ini dapat kita tunda atau dapat kita hindari. Adapun dalam tulisan saya ini ingin menyampaikan bahwa kearipan budaya lokal tidak selalu usang oleh jaman. Namun masih relevan dan masih memiliki nilai-nilai yang luhur.
Kearipan nilai-nilai budaya ini masih sangat terasa dan masih ada sampai saat ini di BALI. Sehingga BALI menjadi tuan rumah konfrensi mengani pemanasan global. BALI menarwarkan konsep TRI HITA KARANA. Tri Hita Karana merupakan nilai-nilai yang luhur yang diwariskan oleh pendahulu kita yang diwariskan ke anak cucunya supaya bisa menjaga keseimbangan alam ini. Adapun Nilai-nilai Tri Hita Karana itu adalah:
1. Menghormati TUHAN. Dengan menghormati Tuhan maka kita tidak bertindak sewenang-wenang, kita selalu ingat akan kebesaran Tuhan karena Tuhan ada dimana-mana, menenpati semua tempat, tak ada tempat yang tak ditempatinya. Sehingga kita harus selalu ingat bahawasanya Tuhan selalu melihat tindak tanduku kita.
2. Menghormati SESAMA, sesama disini sesama ciptaan Tuhan. Kita didunia ini sama-sama ciptaan Tuhan harus saling menghargai satu sama lain, tanpa membdakan Ras, Suka, Bangsa, dan Agama. Sehingga konsep ini dikenal dengan Tat Twam Asi (Aku adalan kamu, Kamu adalah aku) artinya aku dan kamu berasal dari pencipta yang sama. Bahkan disini juga berlaku Bhina Tunggal Ika Tan Hana Dharma Mangurua (Berbeda-beda tetapi tetap satu tidak ada kebenaran yang mendua).
3. Menghormati LINGKUNGAN (Alam Semesta), kita harus menghormati lingkungan atau alam semesta, bila kita tidak menghormati alam maka alampun akan marah dan membinasakan kita. Kadang kita tidak pernah memperlakukan alam dengan alami. Kita kadang tamak dan dan rakus memperlakukan alam. Seperti menebang kayu dengan semena-mena, mengeksploitasi kekayaan alam dengan seenaknya. akibatnya alam tidak seimbang alias sakit. Dibali menghargai alam ini diwujudkan dengan Tumpek Uduh (menghormati alam yang produktif). Bila kita memiliki kebun atau pohon-pohon yang produktif orang-orang bali memberikan penghormatan kadang berupa sesajen. Pemberian sesajen disini bukan menyembah pohon tetapi rasa hormat pada pohon alam yang telah memberikan keseimbangan alam. Bukan saja pohon atau alam yang dihormati pada saat acara Tumpek Uduh tersebut tetapi sesuatu yang memberikan penghasilan atau nilai manfaat pada manusia. Seperti tukang ojek bila motornya sebagai sumber mata pencaharian maka saat itu diberikan rasa penghormatan pada motor, atau ada tukang bangunan dimana perkakasnya berupa kampak, gergaji, pahat, dll, pada saat upacara tumpek uduh akan diberikan penghormatan.
Dengan konsep Tri Hita Karana orang bali menjaga kelestarian alam dan lingkungan sehingga bisa hidup selaras dengan alam yang selalu bertawakal pada Tuhan Yang Maha Esa.
BAB-3
ATRIBUT PRIMITIF 2D
Yang termasuk dalam atribut primitive adalah titik dan garis. Pembetuk garis yang dikenal adalah algoritma DDA, dan Bresenham.
Oleh : I Gusti Ngurah Suryantara,S.Kom., M.Kom
3.1. PENDAHULUAN
Yang merupakan atribut primitif adalah: titik dan garis. Ada beberapa metode pembentuk garis yang umum digunakan yaitu:Algoritma DDA (Digital Defferential Analyzer) dan Algoritma Bressenham
3.1.1. DDA (Digital Defferential Analyzer)
Garis merupakan kumpulan dari titik-titik, untuk membentuk garis lurus adalah dengan mengetahui titik awal dan titik akhir. Dengan mengetahui titik awal dan titik akhir maka kita dapat membentuk garis. Untuk menggambarkan proses pembuatan garis dari titik awal ke titik akhir ada berbagai algoritma. Algoritam yang umum adalah DDA dan Bresenham.
Berikur ini adalah algoritma DDA
1. Tentukan 2 buah titik.
2. Tentukan yang menjadi titik awal (X0,Y0) dan titik akhir (X1,Y1).
3. Hitung Dx dan DyDx = X1-X0 dan Dy = Y1 – Y0
4. Bandingkan Abs(Dx) dan Abs(Dy)Jika Abs(Dx) > Abs(Dy) makaSteps = Abs(Dx) bila tidak Steps = Abs(Dy)
5. Hitung penambahan koordinat pixel, yaitu:X_increment = dx/steps, danY_increment = dy/steps.
6. Koordint selanjutnya, yaituX+X_incrementY+Y_increment
7. Posisi pixel ditentukan dengan pembulatan nilai koordinat tersebut.
8. Ulangi langkah 6 dan 7 untuk posisi selanjutnya sampai X = X1, Y = Y1
DDA (bahasa pascal)Procedure DDA;
Begin
Write(‘Masukkan Nilai X0 : ‘);
Readln(X0); Write(‘Masukkan Nilai Y0 : ‘);
Readln(Y0); Write(‘Masukkan Nilai X1 : ‘);
Readln(X1); Write(‘Masukkan Nilai Y1 : ‘);
Readln(Y1);
Dx:= X1-X0;
Dy:= Y1-Y0;
If Abs(Dx) > Abs(Dy) Then
Steps:= Abs(Dx)
Else
Steps:= Abs(Dy);
Endif
PutPixel(x,y,Hitam);
For x = 1 to Steps Do
X := X + Xincrement;
Y := Y + Yincrement;
PutPixel(x,y,Hitam);
End;
End;
Contoh
Diketahui 2 buah titik A(10,10) dan titik B(17,16), bila titik A sebagai titik awal dan titik B sebagai titik akhir maka buatlah garis yang menghubungkan titik tersebut dengan menggunakan algoritma DDA.
Jawab
Titik Awal = A(10,10)
Titik Akhir = B(17,16)
Dx = (X1-X0) (17-10) = 7
Dy = (Y1-Y0) (16-10) = 6
Abs(Dx) = Abs(7) = 7
Abs(Dy) = Abs(6) = 6
Abs(Dx) > Abs(Dy) maka
Step = Abs(Dx) = 7
Xincrement = Dx / Steps. 7 / 7 = 1
Yincrement = Dy / Steps. 6 / 7 = 0,86
Tabel 3.1. Nilai perhitungan
|
K |
X | Y | Xinc | Yinc |
| - | - | - | 10 | 10 |
| 0 | 11 | 10,86 | 11 | 11 |
| 1 | 12 | 11,71 | 12 | 12 |
| 2 | 13 | 12,57 | 13 | 13 |
| 3 | 14 | 13,43 | 14 | 14 |
| 4 | 15 | 14,28 | 15 | 15 |
| 5 | 16 | 15,14 | 16 | 16 |
| 6 | 17 | 16 | 17 | 16 |
3.1.2.BRESSENHAMALGORITMA BRESSENHAM
Tujuan dari algoritma Bressenham ini adalah untuk menghindari pembulatan nilai seperti pada algoritma DDA.
1. Tentukan dua titik yang akan dihubungkan dalam pembentukan garis.
2. Tentukan salah satu titik di sebelah kiri sebagai titi awal, yaitu (x0,y0) dan titik lainnya sebgai titik akhir (x1,y1).
3. Hitung dx,dy,2dx dan 2dy-2dx.
4. Hitung parameter P0 = 2dy-dx
5. Untuk setiap Xk sepanjang jalur garis, dimulai dengan k=0,bila pk <0, maka titik selanjutnya adalah (xk+1, yk), dan Pk+1 = Pk+2dybila tidak, maka titik selanjutnya adalah (xk+1,yk+1), dan Pk+1 = Pk+2dy-2dx
6. Ulangi langkah no 5 untuk menentukan posisi pixel selanjutnya, sampai x = x1 dan y = y1.
Sub Rutim Berssenham dalam CVoid line (int xa, ya, xb, yb, xEnd; flot x,y)
{
Int dx = abs(xb-xa), dy=abs(yb-ya);
Int p = 2*dy-dx;
Int twoDy = 2*dy,
twodyDx = 2*(dy-dx);
If (xa>xb)
{
X = xb;
Y = yb;
Xend = xa;
}
Else
{
X = xa;
Y = ya;
xEnd = xb;
}
SetPixel(x,y);
While (x<xEnd)
{
X++;
If (p<0)
P+ = twody;
Else
{
Y++;
P+ = twoDyDx;
}
SetPixel(x,y);
}
};
Contoh
Berdasarkan contoh pada algoritma DDA buatlah dengan metode bresenham.
JAWAB
dx = abs(xb – xa)= abs(17 – 10 ) = 7
dy = abs(yb – ya)= abs(16 – 10) = 6
p = 2 * dy - dx = 2 * 6 – 7 = 5
twody = 2 * dy = 2 * 6 = 12
twodydx= 2 * (dy – dx ) = 2 * ( 6 – 7 ) = -2
Periksa xa dan xb
xa = 10 < xb = 17Maka
x = xa = 10
y = ya = 10
Xend = xa = 17
Ulangi selama x < xend
K0: x = x + 1 = 10 + 1 = 11
Periksa nilai p , dimana p = 5
y = y + 1 = 10 + 1 = 11
p = p + twodydx = 5 + (-2) = 3
K1: x = x + 1 = 11 + 1 = 12
Periksa nilai p, dimana p = 3
y = y +1 = 11 + 1 = 12
p = p + twodydx = 3 + (-2) = 1
K2: x = x + 1 = 12 + 1 = 13
Periksa nilai p, dimana p = 1
y = y +1 = 12 + 1 = 13
p = p + twodydx = 1 + (-2) = -1
K3: x = x + 1 = 13 + 1 = 14
Periksa nilai p, dimana p = -1 Nilai y tetap yaitu y=13
p = p + twody = (-1) + 12 = 11
K4: x = x + 1 = 14 + 1 = 15
Periksa nilai p, dimana p = 11
y = y +1 = 13 + 1 = 14
p = p + twodydx = 11 + (-2) = 9
K5: x = x + 1 = 15 + 1 = 16
Periksa nilai p, dimana p = 9
y = y +1 = 14 + 1 = 15
p = p + twodydx = 9 + (-2) = 7
K6: x = x + 1 = 16 + 1 = 17
Periksa nilai p, dimana p = 7 y = y +1 = 15 + 1 = 16
p = p + twodydx = 7 + (-2) = 5
Proses berhenti karena x = x1 dan y = y1
Masukkan nilai kedalam tabel, seperti pada tabel 3.2. Tabel 3.2.
Hasil penelusuran dengan bressenham
|
K |
Pk | (Xk+1 , Yk+1) |
| - | - | 10,10 |
| 0 | 3 | 11,11 |
| 1 | 1 | 12,12 |
| 2 | -1 | 13,13 |
| 3 | 11 | 14,13 |
| 4 | 9 | 15,14 |
| 5 | 7 | 16,15 |
| 6 | 5 | 17,16 |
LatihanDiketahui 2 buah titik yaitu, A(25,27) dan B(20,17), buatlah garis dengan menggunakan algoritma DDA dan Bressenham.