Tải bản đầy đủ (.pdf) (5 trang)

Đồ họa máy tính : CÁC ĐỐI TƯỢNG ĐỒ HỌA CƠ SỞ part 4 pps

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (490.67 KB, 5 trang )


Hình 2.15
– Đường tròn vẽ ra không liền nét theo cách vẽ trên
2.2.2. Thuật toán MidPoint
Do tính đối xứng của đường tròn (C) nên ta chỉ cần vẽ cung (C
1/8
) là cung 1/8 đường tròn, sau đó
lấy đối xứng. Cung (C
1/8
) được mô tả như sau (cung của phần tô xám trong hình vẽ) :
Hình 2.16
– Các vị trí đối xứng trên đường tròn (C) tương ứng với (x,y)
Như vậy nếu có (x, y) Î (C
1/8
) thì các điểm : (y, x), (y,-x), (x,-y), (-x,-y), (-y,-x), (-y,x), (-x,y) sẽ
thuộc (C).
Chọn điểm bắt đầu để vẽ là điểm (0,R). Dựa vào hình vẽ, nếu là điểm nguyên đã tìm được
ở bước thứ i, thì điểm ở bước thứ (i+1) là sự lựa chọn giữa S và P.
Như vậy :
Tương tự như thuật toán MidPoint vẽ đoạn thẳng, việc quyết định chọn một trong hai điểm S và P
sẽ được thực hiện thông qua việc xét dấu của một hàm nào đó tại điểm MidPoint là điểm nằm giữa
chúng.
Hình 2.17
– Thuật toán MidPoint vẽ đường tròn
Đặt , ta có :
Xét . Ta có :
Nếu , điểm MidPoint nằm trong đường tròn. Lúc này điểm thực Q gần S
hơn nên ta chọn S, tức là .
Ngược lại, nếu , điểm MidPoint nằm ngoài đường tròn. Lúc này điểm
thực Q gần P hơn nên ta chọn P, tức là .
Mặt khác :


Vậy :
, nếu do ta chọn .
, nếu do ta chọn .
Ta tính giá trị

ứng với điểm ban đầu .
Lưu đồ thuật toán MidPoint vẽ đường tròn














Cài đặt minh họa thuật toán
MidPoint vẽ đường tròn
// Ve 8 diem doi xung
void

Put8Pixel(int
x
,


int
y
)
{
putpixel
(
x
,
y
,
Color
);
putpixel
(
y
,
x
,
Color
);
putpixel
(
y
,
x
,
Color
);
putpixel
(

y
,

-
x
,
Color
);
putpixel
(
x
,

-
y
,
Color
);
putpixel
(-
x
,

-
y
,
Color
);
putpixel
(-

y
,

-
x
,
Color
);
putpixel
(-
y
,
x
,
Color
);
putpixel
(-
x
,
y
,
Color
);
} // Put8Pixel
void

CircleMidPoint

(int

R
)
{
int
x
,
y
;
x
=
0
;
y
=
R
;
Put8Pixel
(
x
,
y
);
p
=
1
-
R
;
// 5/4-R
while (

x
<
y
)
{
if (
p
<
0
)
p
+=
2
*
x
+
3
;
else
{
p
+=
2
*(
x
-
y
)

+

5
;
y
;
}
x
++;
Put8Pixel
(
x
,
y
);
}
} // CircleMidPoint
2.3. Thuật toán vẽ các đường conics và một số đường cong khác
Phương trình tổng quát của các đường conics có dạng : . Giá trị
của các hằng số A, B, C, D, E, F sẽ quyết định dạng của đường conics, cụ thể là nếu:
Ta sẽ áp dụng ý tưởng của thuật toán MidPoint để vẽ các đường conics và một số đường cong
khác, theo các bước tuần tự sau:
Bước 1 :
Dựa vào dáng điệu và phương trình đường cong, để xem thử có thể rút gọn phần đường
cong cần vẽ hay không. Điều này sẽ làm tăng tốc độ vẽ so với việc phải vẽ toàn bộ đường cong.
Một trong những cách đơn giản nhất là dựa vào tính đối xứng, tính chất của hàm chẵn, hàm lẻ, ¼
Bước 2 :
Tính đạo hàm để từ đó phân thành các vùng vẽ :
Nếu thì
Nếu thì
Nếu thì
Nếu thì

Đây là bước quan trọng vì với việc xác định đối tượng x hay y biến thiên theo dáng điệu của đường
cong sẽ đảm bảo đường sau khi được vẽ ra sẽ liền nét, không bị hở.
Bước 3 :
Xác định công thức của cho từng trường hợp để quyết định (*) dựa trên dấu của .
thường là hàm được xây dựng từ phương trình đường cong để cho nếu thuộc về
đường cong. Việc chọn cần phải chú ý sao cho thao tác tính sau này hạn chế phép toán trên
số thực.
Bước 4 :
Tìm mối liên quan của và bằng cách xét hiệu .
Bước 5 :
Tính
và hoàn chỉnh thuật toán.

×