Anda di halaman 1dari 5

Nama : Adelia Nafiatul Farida

Kelas : SE 05-01
Nim : 1201220025

Tugas 2 Grafika Komputer


3.2 Exercise 3.2 Apply the structural algorithm in section 3.3 to draw the line in figure 3.6.

Jawab :

1. Langkah Pertama yaitu menggambar pola awal


a) Di berikan 2 titik ujung yaitu (x0, y0) dan (x1,y1) dari sebuag garis dengan
kemiringan antara nol dan satu, dimana dx = x1-x0 dan dy = y1-y0 Diberikan dua
titik ujung (x0, y0) dan (x1, y1) dari sebuah garis dengan kemiringan antara nol dan satu,
dimana dx = x1 - x0 dan dy = y1 - y0 dan kemudian di hitung.
b) Ketika memulai dari piksel awal dx, lebih banyak piksel yang harus digambar. Untuk
dx piksel ini, langkah diagonal sebanyak dy diperlukan. Sisa langkah (dx - dy) harus
dilakukan secara horizontal.
c) Masalah yang harus dipecahkan terdiri dari menemukan urutan langkah diagonal
dan horizontal yang benar
d) Sebuah deret 3 Hdx-dyDdy, yang mencakup jumlah langkah horizontal dan diagonal yang
benar namun mungkin dalam urutan yang salah, digunakan sebagai estimasi awal untuk
pola gambar garis.
e) Melalui permutasi yang sesuai dari urutan awal ini, akan dihasilkan urutan yang
tepat untuk menggambar garis.
2. Menggambar garis dan kurva
Pertimbangan untuk algoritma struktural juga akan fokus pada garis dengan
kemiringan antara nol dan satu. Algoritma struktural akan membuat pola berulang
untuk menggambar piksel dengan urutan langkah horizontal (H) dan diagonal (D),
berdasarkan prinsip-prinsip berikut.
3. Algoritma Brons
Algoritma Brons membangun permutasi yang benar dari urutan awal Hdx-dyDdy
dengan cara
berikut:
a.) Jika dx dan dy (dan karenanya juga (dx - dy)) memiliki pembagi persekutuan
terbesar lebih dari satu, yaitu g = gcd(dx, dy) > 1, maka garis piksel dapat digambar
dengan pengulangan g dari urutan panjang dx/g.
b.) Asumsi yang terjadi adalah bahwa dx dan dy tidak memiliki pembagi persekutuan.
c.) Biarkan P dan Q menjadi dua kata (urutan) di atas alfabet {D, H}
d.) Dari urutan awal PpQq dengan frekuensi p dan q yang tidak memiliki pembagi
persekutuan dan dengan asumsi tanpa kehilangan keumuman p > q, langkah
selanjutnya adalah:
e.) (Pk+1Q)r(PkQ)q-r jika r > (q - r).
f.) Terapkan prosedur yang sama secara rekursif ke sub-urutan dengan panjang r dan
(q - r),masing-masing, hingga r = 1 atau (q - r) = 1 berlaku.

Example :

Langkah-langkah:

1. Tentukan titik awal dan akhir (Titik awal (x0, y0) = (0, 0)

a.) Titik akhir (x1, y1) = (82, 34)

b.) Hitung dx, dy, dan gcd(dx, dy):

➢ dx = x1 - x0 = 82
➢ dy = y1 - y0 = 34
➢ gcd(dx, dy) = 2

c.) Bagi dx dan dy dengan gcd(dx, dy):

➢ dx' = dx / gcd(dx, dy) = 41


➢ dy' = dy / gcd(dx, dy) = 17

d) Gunakan algoritma Bresenham untuk menggambar garis:

➢ Mulai dari (0, 0).


➢ Ulangi langkah berikut hingga mencapai (41, 17).
➢ Jika p >= 0, pilih H (langkah horizontal).
➢ Jika p < 0, pilih D (langkah diagonal).
➢ Perbarui p: p = p + 2dy' - dx'.
➢ Ulangi langkah 4 untuk menggambar garis dari (41, 17) ke (82, 34)
3.3 Extend the program GeneralPathCar.java for drawing the car of figure 2.10. Show the
control points for the quadratic and cubic curves and connect the endings of the
curves with their corresponding control points by dashed lines.
4. import java.awt.*;
5. import java.awt.geom.*;
6.
7. /**
8. * An example for the use of a GeneralPath to draw a car.
9. *
10. * @author Frank Klawonn
11. * Last change 07.01.2005
12. */
13. public class GeneralPathCar extends Frame
14. {
15. //Constructor
16. GeneralPathCar()
17. {
18. //Enables the closing of the window.
19. addWindowListener(new MyFinishWindow());
20. }
21.
22. public void paint(Graphics g) {
23. Graphics2D g2d = (Graphics2D) g;
24.
25. // Use antialiasing to have nicer lines.
26. g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
27.
28. // The lines should have a thickness of 3.0 instead of 1.0.
29. BasicStroke bs = new BasicStroke(3.0f, BasicStroke.CAP_ROUND,
BasicStroke.JOIN_ROUND);
30. g2d.setStroke(bs);
31.
32. // Define the dash pattern for the stroke
33. float[] dashPattern = {10, 5}; // 10 pixels drawn, 5 pixels
skipped, repeated
34. bs = new BasicStroke(3.0f, BasicStroke.CAP_ROUND,
BasicStroke.JOIN_ROUND, 10, dashPattern, 0);
35. g2d.setStroke(bs);
36.
37. // The GeneralPath to describe the car.
38. GeneralPath gp = new GeneralPath();
39.
40. // Start at the lower front of the car.
41. gp.moveTo(60, 120);
42. // front underbody
43. gp.lineTo(80, 120);
44. // front wheel
45. gp.quadTo(90, 140, 100, 120);
46. // middle underbody
47. gp.lineTo(160, 120);
48. // rear wheel
49. gp.quadTo(170, 140, 180, 120);
50. // rear underbody
51. gp.lineTo(200, 120);
52. // rear
53. gp.curveTo(195, 100, 200, 80, 160, 80);
54. // roof
55. gp.lineTo(110, 80);
56. // windscreen
57. gp.lineTo(90, 100);
58. // bonnet
59. gp.lineTo(60, 100);
60. // front
61. gp.lineTo(60, 120);
62.
63. // Draw the car.
64. g2d.draw(gp);
65.
66. // Reset the stroke to solid line for the coordinate system
67. g2d.setStroke(new BasicStroke(1.0f));
68.
69. // Draw a coordinate system.
70. drawSimpleCoordinateSystem(200, 150, g2d);
71. }
72.

73. /**
74. * Draws a coordinate system (according to the window coordinates).
75. *
76. * @param xmax x-coordinate to which the x-axis should extend.
77. * @param ymax y-coordinate to which the y-axis should extend.
78. * @param g2d Graphics2D object for drawing.
79. */
80. public static void drawSimpleCoordinateSystem(int xmax, int ymax,
81. Graphics2D g2d)
82. {
83. int xOffset = 30;
84. int yOffset = 50;
85. int step = 20;
86. String s;
87. //Remember the actual font.
88. Font fo = g2d.getFont();
89. //Use a small font.
90. g2d.setFont(new Font("ARIAL",Font.PLAIN,9));
91. //x-axis.
92. g2d.drawLine(xOffset,yOffset,xmax,yOffset);
93. //Marks and labels for the x-axis.
94. for (int i=xOffset+step; i<=xmax; i=i+step)
95. {
96. g2d.drawLine(i,yOffset-2,i,yOffset+2);
97. g2d.drawString(String.valueOf(i),i-7,yOffset-7);
98. }
99.
100. //y-axis.
101. g2d.drawLine(xOffset,yOffset,xOffset,ymax);
102.
103. //Marks and labels for the y-axis.
104. s=" "; //for indention of numbers < 100
105. for (int i=yOffset+step; i<=ymax; i=i+step)
106. {
107. g2d.drawLine(xOffset-2,i,xOffset+2,i);
108. if (i>99){s="";}
109. g2d.drawString(s+String.valueOf(i),xOffset-25,i+5);
110. }
111.
112. //Reset to the original font.
113. g2d.setFont(fo);
114. }
115.
116. public static void main(String[] argv)
117. {
118. GeneralPathCar f = new GeneralPathCar();
119. f.setTitle("General Path Car");
120. f.setSize(500,500);
121. f.setVisible(true);
122. f.setLocationRelativeTo(null);
123. }
124. }

Dengan hasil output.

Anda mungkin juga menyukai