Professional Documents
Culture Documents
Lý thuyết
Bài 1: Hãy chạy bằng tay giải thuật Bresenham, vẽ đường ellipse, tâm (0,0) với
a=10, b=8.
2
a
XT = = 7,8
√ a2 +b2
x y Pi Tính Pi P
2 2
0 8 P1 10 ( 1− 2.8 ) +2.8 -1372
2
1 8 P2 −1372+2.8 ( 2.0+3 ) -988
2
2 8 P3 − 988+2.8 ( 2.1+ 3 ) -348
2
3 8 P4 −348+ 2.8 ( 2.2+3 ) 548
2 2
4 7 P5 548+2.8 ( 2.3+3 )+ 4.10 ( 1− 8 ) -1100
2
5 7 P6 −1100+2.8 ( 2.4+3 ) 308
2 2
6 6 P7 308+2.8 ( 2.5+3 )+ 4.10 ( 1− 7 ) -428
2
7 6 P8 − 428+2.8 ( 2.6+3 ) 1492
Bài 2: Hãy chạy bằng tay giải thuật Midpoint, vẽ đường ellipse tâm (0,0) với
a=10, b=8.
#include <GL/glut.h>
#include <vector>
struct Point {
double x, y;
class Polygon {
public:
std::vector<Point> vertices;
void createSamplePolygon() {
samplePolygon.addVertex(-0.5, -0.5);
samplePolygon.addVertex(0.5, -0.5);
samplePolygon.addVertex(0.5, 0.5);
samplePolygon.addVertex(-0.5, 0.5);
}
void drawPolygon() {
glBegin(GL_LINE_LOOP);
glColor3f(1.0, 1.0, 1.0); // Màu vẽ (trắng)
for (const Point& vertex : samplePolygon.vertices) {
glVertex2f(vertex.x, vertex.y);
}
glEnd();
}
void display() {
glClear(GL_COLOR_BUFFER_BIT);
glLoadIdentity();
glTranslatef(0.0f, 0.0f, -5.0f);
drawPolygon();
glFlush();
}
void init() {
glClearColor(0.0, 0.0, 0.0, 0.0); // Màu nền đen
}
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize(400, 400);
glutCreateWindow("OpenGL Polygon");
init();
glutDisplayFunc(display);
glutMainLoop();
return 0;
}
Bài 3: Hãy so sánh 2 giải thuật và 2 chương trình Bresenham và Midpoint để vẽ
đường ellipse.
So sánh giữa Bresenham và Midpoint:
Cả hai giải thuật đều sử dụng nguyên tắc tìm điểm trung điểm (Midpoint)
để quyết định điểm tiếp theo trên đường vẽ.
Cả hai đều giả định rằng giá trị của hàm đường thẳng là một hằng số trên
các đoạn nằm giữa hai điểm.
Bài 4: SV tìm hiểu thêm về sự kiện thay đổi kích thước cửa sổ. Cho các ví dụ
đơn giản.
#include <GL/glut.h>
float trianglePositionX = 0.0f; // Vị trí ban đầu của tam giác theo trục x
float trianglePositionY = 0.0f; // Vị trí ban đầu của tam giác theo trục y
void drawTriangle() {
glBegin(GL_TRIANGLES);
glColor3f(1.0f, 1.0f, 1.0f); // Màu trắng
glVertex2f(trianglePositionX, trianglePositionY + 0.2f); // Đỉnh trên
glVertex2f(trianglePositionX - 0.2f, trianglePositionY - 0.2f); // Đỉnh dưới
bên trái
glVertex2f(trianglePositionX + 0.2f, trianglePositionY - 0.2f); // Đỉnh dưới
bên phải
glEnd();
}
void display() {
glClear(GL_COLOR_BUFFER_BIT);
glLoadIdentity();
drawTriangle();
glFlush();
}
void init() {
glClearColor(0.0f, 0.0f, 0.0f, 1.0f); // Màu nền đen
}
init();
glutDisplayFunc(display);
glutMainLoop();
return 0;
}
Bài 5: SV hãy viết thuật toán trung điểm vẽ cung CB cho hình ellipse.