Đoạn thẳng có 2 điểm là (12,20) và (22,27). Dùng thuật toán Bresenhaghm vẽ đoạn thẳng tính các giá trị p và y tại x =13:
A.
p = -3 và y = 21
B.
p = -2 và y = 21
C.
p = -3 và y = 22
D.
p = 5 và y = 23
Đáp án
Để giải bài toán này, ta cần áp dụng thuật toán Bresenham để vẽ đoạn thẳng.
1. **Tính dx và dy:**
- dx = x2 - x1 = 22 - 12 = 10
- dy = y2 - y1 = 27 - 20 = 7
2. **Khởi tạo p:**
- p0 = 2*dy - dx = 2*7 - 10 = 14 - 10 = 4
3. **Duyệt x từ x1 đến x = 13:**
- x = 12, y = 20, p = 4
- x = 13:
- Nếu p < 0: y = y, p = p + 2*dy
- Nếu p >= 0: y = y + 1, p = p + 2*dy - 2*dx
- Vì p = 4 >= 0, ta có:
- y = 20 + 1 = 21
- p = 4 + 2*7 - 2*10 = 4 + 14 - 20 = -2
Vậy tại x = 13, ta có p = -2 và y = 21.
Để giải bài toán này, ta cần áp dụng thuật toán Bresenham để vẽ đoạn thẳng.
1. **Tính dx và dy:**
- dx = x2 - x1 = 22 - 12 = 10
- dy = y2 - y1 = 27 - 20 = 7
2. **Khởi tạo p:**
- p0 = 2*dy - dx = 2*7 - 10 = 14 - 10 = 4
3. **Duyệt x từ x1 đến x = 13:**
- x = 12, y = 20, p = 4
- x = 13:
- Nếu p < 0: y = y, p = p + 2*dy
- Nếu p >= 0: y = y + 1, p = p + 2*dy - 2*dx
- Vì p = 4 >= 0, ta có:
- y = 20 + 1 = 21
- p = 4 + 2*7 - 2*10 = 4 + 14 - 20 = -2
Vậy tại x = 13, ta có p = -2 và y = 21.
Thuật toán DDA (Digital Differential Analyzer) là một thuật toán đồ họa máy tính được sử dụng để vẽ các đường thẳng bằng cách tính toán các điểm trên đường thẳng dựa trên sự thay đổi nhỏ trong tọa độ x hoặc y. Trong trường hợp này, chúng ta cần tính giá trị y và yi tại x = 12.
Ta có hai điểm là (12, 20) và (22, 27).
Đầu tiên, ta thấy rằng khi x = 12, y = 20 (điểm đầu tiên của đoạn thẳng).
Vì vậy, giá trị yi (giá trị y được hiển thị trên màn hình, thường là số nguyên) tại x = 12 sẽ là 20, và giá trị y (giá trị y thực tế) cũng là 20.
Vậy đáp án đúng là yi = 20 và y = 20.
Câu lệnh `SetViewPort(getmaxX div 2, getmaxY div 2, GetmaxX, GetmaxY, clipoff)` dùng để thiết lập một viewport (vùng nhìn) trên màn hình đồ họa. Cụ thể, nó định nghĩa một hình chữ nhật trên màn hình mà việc vẽ sẽ bị giới hạn trong đó. Các tham số:
* `(getmaxX div 2, getmaxY div 2)`: Tọa độ góc trên bên trái của viewport.
* `(GetmaxX, GetmaxY)`: Tọa độ góc dưới bên phải của viewport.
* `clipoff`: Tắt chế độ clipping (cắt xén), cho phép vẽ ra ngoài viewport.
Do đó, câu lệnh này thiết lập một viewport ở góc dưới bên phải của màn hình, bắt đầu từ giữa màn hình theo cả chiều ngang và chiều dọc, và tắt việc cắt xén.
Hàm `GetX()` trả về tọa độ x hiện tại của con trỏ đồ họa (current position - CP) và hàm `GetY()` trả về tọa độ y hiện tại của CP. Do đó, cặp hàm `GetX`, `GetY` được dùng để trả lại tọa độ hiện thời của CP.
Lệnh `Bar(X1, Y1, X2, Y2)` trong ngôn ngữ lập trình đồ họa (thường là Turbo Pascal) được sử dụng để vẽ một hình chữ nhật được tô màu (tô đặc). Trong đó, (X1, Y1) là tọa độ của góc trên bên trái và (X2, Y2) là tọa độ của góc dưới bên phải của hình chữ nhật.
* **Phương án 1: "Tô hình chữ nhật"** - Mô tả này không đầy đủ vì không chỉ rõ là hình chữ nhật được tô đặc hay chỉ vẽ khung.
* **Phương án 2: "Tô hình chữ nhật đặc"** - Đây là mô tả chính xác nhất cho chức năng của lệnh `Bar()`.
* **Phương án 3: "Tô hình hộp"** - Không chính xác, lệnh `Bar()` vẽ hình chữ nhật, không phải hình hộp.
* **Phương án 4: "Tô đa giác"** - Không chính xác, lệnh `Bar()` chỉ vẽ hình chữ nhật, một trường hợp đặc biệt của đa giác nhưng không phải là đáp án bao quát và chính xác nhất.