Thuật toỏn MidPoint vẽ đoạn thẳng

Một phần của tài liệu Tìm hiểu về đồ họa máy tính ppt (Trang 35 - 177)

Jack Bresenham 1965 / Pitteway 1967, ỏp dụng cho việc sinh cỏc đường thẳng và đường trũn 1985

Thuật toỏn này thực chất là 1 cỏch diễn giải khỏc của thuật toỏn Bresenham. Ta lựa chọn yi+1 là yi hay yi+1 bằng cỏch so sỏnh trung điểm của O của PS với đường thẳng thực

• Nếu O nằm phớa dưới đường thẳng, ta chọn P

• Nếu O nằm phớa trờn, ta chọn S

Phương trỡnh đường thẳng thực: Ax + By + C = 0 với A = y2 – y1; B = x1 – x2; C = x2y1 – x1y2 ;

Hỡnh 2.11. Thuật toỏn Midpoint vẽ đoạn thẳng

Đặt F(x,y) = Ax + By + C, ta biết rằng

• F(x,y) <0 nếu điểm (x,y) nằm phớa trờn đường thẳng

• F(x,y) =0 nếu điểm (x,y) thuộc đường thẳng

• F(x,y) >0 nếu điểm (x,y) nằm phớa dưới đường thẳng

vỡ vậy, vấn đề quy về việc xột dấu của pi = 2F(O) = 2F(xi +1,yi +1/2)

• Nếu pi <0 tức là O nằm phớa trờn đường thẳng ⇒ ta chọn S

• Nếu pi >0 tức là O nằm phớa dưới đường thẳng ⇒ ta chọn P

Làm sao để tớnh pi ? tương tự như thuật toỏn Bresenham, ta cũng dựng phương phỏp “lũy tiến”, dựng giỏ trị ở bước trước pi để tớnh giỏ trị ở bước tiếp theo pi+1

Ta cú: pi+1 – pi =2F(xi+1 +1,yi+1 +1/2) - 2F(xi +1,yi +1/2) = 2[A(xi+1+1)+B(yi+1+1/2)+C] - 2[A(xi+1)+B(yi+1/2)+C] = 2dy – 2dx(yi+1 – yi)

Như vậy

• Nếu pi <0 thỡ ta chọn yi+1 = yi , do đú pi+1 = pi +2dy

• Nếu pi >0 thỡ ta chọn yi+1 = yi+1 , do đú pi+1 = pi +2dy – 2dx

Cuối cựng, giỏ trị đầu p0 được tớnh như sau: nhận xột rằng điểm đầu (x0, y0) thuộc đoạn thẳng thực tức là Ax0 + By0 +C = 0

p0 = 2F(x0+1,y0+1/2) = 2[A(x0+1)+B(y0+1/2)+C] = 2(Ax0 + By0 +C) + 2A +B = 2A+B O: điểm giữa xi+1 S xi yi+1 yi P

Hỡnh 2.12. Lưu đồ thuật toỏn Midpoint vẽ đoạn thẳng

* Thuat toan Midpoint de ve doan thang (0<k<1) */

void Mid_line(int x1, int y1, int x2, int y2, int c) { int x, y, dx, dy,d;

y = y1; dx = x2 - x1; dy = y2 - y1; d= 2dy - dx; for (x=x1; x<=x2; x++) { Putpixel (x,y,c); If (d<=0) D=d+2*dy Else { Y++; D=d+2*(dy-dx); } } } 2.2.2. Vẽ đường trũn

2.2.2.1. Thuật toỏn đơn giản vẽ đường trũn

Trong hệ tọa độ Descartes, phương trỡnh đường trũn bỏn kớnh R cú dạng: Với tõm O(0,0) : x2 + y2 = R2

Với tõm C(xc,yc): (x - xc )2 + (y - yc )2 = R2

Trong tọa độ cực: x=xc+r cosθ và y=yc+Rsinθ với θ∈[0,2π]

(x,y) (y,x) (y, -x) (x, -y) (-x, -y) (-y, -x) (-y, x) (-x, y) A B

Đầu tiờn ta nhận xột rằng, do tớnh đối xứng của đường trũn nờn ta chỉ cần vẽ được cung AB là cung 1/8 đường trũn, sau đú lấy đối xứng qua cỏc trục và cỏc đường phõn giỏc ta sẽ cú cả đường trũn. Chẳng hạn như ở hỡnh vẽ trờn nếu xỏc định được điểm (x,y), lấy đối xứng qua đường phõn giỏc của gúc phần tư thứ nhất ta thu được điểm (y,x), lấy đối xứng qua trục hoành ta thu được 2 điểm (y,-x) và (x,-y) ... Nếu ta chia thành 16,32 ... phần thỡ việc xỏc định tọa độ 15,31... điểm đối xứng cũn lại sẽ rất khú. Cũn nếu chia thành 4 hay 2 phần thỡ số điểm lõn cận cần phải loại trừ cú thể nhiều hơn 2 điểm.

Procedure Circle (xc, yc, R : integer) ; Var x, y : integer ;

Procedure DOIXUNG ; Begin

putpixel (xc + x , yc +y, color) ; putpixel (xc - x , yc + y, color) ; putpixel (xc + x , yc - y, color) ; putpixel (xc - x , yc- y, color) ; putpixel (xc + y , yc + x, color) ; putpixel (xc - y , yc + x, color) ; putpixel (xc + y , yc - x, color) ; putpixel (xc - y , yc - x, color) ; End ; Begin For x : = 0 to round(R*Sqrt(2)/2) do Begin y : = round(Sqrt(R*R - x*x)) ; DOIXUNG; End ; End ;

2.2.2.2. Thuật toỏn Midpoint vẽ đường trũn

Gọi R là bỏn kớnh đường trũn, ta xuất phỏt từ điểm A (0,R) để vẽ cung AB. Nhỡn hỡnh vẽ ta thấy, nếu (xi, yi) là điểm ảnh đó vẽ được ở bước thứ i thỡ điểm ảnh (xi+1, yi+1) ở bước tiếp theo chỉ cú thể là S hoặc P, tức là

• xi+1 = xi + 1

• yi+1∈ {yi, yi-1}

Giống như thuật toỏn vẽ đoạn thẳng, ý tưởng chớnh để lựa chọn giữa S và P ở đõy là căn cứ vào vị trớ tương đối của điểm giữa M của SP với đường trũn. Nếu M nằm bờn trong đường trũn như hỡnh vẽ thỡ ta sẽ chọn S vỡ nú gần điểm thực Q hơn so với P. Ngược lại nếu M nằm ngoài đường trũn thỡ P sẽ được chọn.

Đặt F(x,y) = x2 + y2 – R2 , cỏc định lý toỏn học cho ta biết rằng

• F(x,y) <0 nếu điểm (x,y) nằm trong đường trũn

• F(x,y) =0 nếu điểm (x,y) nằm trờn đường trũn

• F(x,y) >0 nếu điểm (x,y) nằm ngoài đường trũn Đặt pi = F(M) = F(xi+1,yi – ẵ) ta cú

• Nếu pi<0 tức là M nằm trong đường trũn, ta sẽ chọn S, tức là yi+1 = yi M: điểm giữa Q(xi+1,y) ) yi yi-1 xi+1 xi P S

Cỏch tớnh giỏ trị của pi cũng tương tự như ở thuật toỏn vẽ đoạn thẳng. Ta cú: pi+1 – pi = F[xi+1+1,yi+1 – ẵ] - F[(xi+1,yi – ẵ)]

= [(xi+1+1)2 +(yi+1 – ẵ)2 - R2] - [(xi+1)2 +(yi – ẵ)2 - R2] = 2xi +3+(yi+12 – yi2) – (yi+1 - yi)

Do đú

• Nếu pi <0 ta chọn yi+1 = yi⇒ pi+1 = pi + 2xi +3

• Nếu pi≥0 ta chọn yi+1 = yi-1 ⇒ pi+1 = pi + 2xi -2yi +5 Cuối cựng ta tớnh giỏ trị đầu p0 ứng với điểm A(0,R)

p0=F(x0+1,y0-1/2) = F(0,R-1/2) = 5/4 -R x < y ? Yes No x:=x+1; PutPixel(x,y); p:=5/4 -R; x:=0; y:=R ; PutPixel8(x,y); p < 0 ? Yes p:=p+2x+3; p:=p+2(x-y); y:=y-1; No Begin end

void Mid_circle(int xc, int yc, int Radius, int color) { int x, y, d; x = 0; y = Radius; d = 1- Radius; while (x <= y) { Putpixel (xc+x,yc+y,color); If (d<0) d+=2*x+3 Else { d+=2*(x-y)+5; y--; } x++; } }

2.2.2.3. Thuật toỏn Bresenham vẽ đường trũn

Ta xột cỏc điểm tạo ra từ gúc phần tư thứ 2: từ 900 đến 450 , thực hiện theo hướng +x, -y

Giả sử bắt đầu xi vậy xi+1 = xi +1 y2 = r2 - (xi +1)2 2 2 2 2 2 1 = yiy = yir −(xi +1) d

d2 = y2 - (yi - 1)2 = r2 - (xi +1)2 - (yi - 1)2 pi = d1 - d2 = 2(xi +1 )2 + yi2 + (yi - 1)2 -2r2

Xột: pi <0 (d1<d2) chọn điểm nằm ngoài đường trũn yi+1 = yi pi >=0 (d1>=d2) chọn điểm nằm trong đường trũn yi+1 = yi +1 pi = 2(xi +1 )2 + 2yi 2-2yi+1-2r2

pi+1 = 2(xi +2 )2 + 2yi+12 - 2yi+1 + 1 - 2r2 pi+1 = pi + 4xi +6 + 2yi+1 2- 2yi2- 2yi+1 + 2yi

p1 = 2(x1 +1)2 + y12+(y1-1)2-2r2 = 2+r2 +(r-1)2 - 2r2 = 3-2r

+ Nếu pi <0 hay yi+1 = yi pi+1 = pi + 4xi +6 + Nếu pi >=0 hay yi+1 = yi -1

pi+1 = pi + 4xi +6 - 4yi + 2 + 2 pi+1 = pi + 4(xi - yi ) + 10

+ Tớnh P1 ? khi đú ứng với x1= 0 và y1 = r

void Bre_circle(int xc, int yc, int Radius, int color) { int x, y, p; x = 0; y = Radius; p = 3 - 2 * Radius; while (x <= y) { putpixel(xc + x, yc + y, color); if (p < 0) p+=4*x+6 else { p+=4*(x-y)+10; y--; } x++;}

Túm tắt chương 2

- Chương 2 đó trỡnh bày khỏi niệm về một hệ độ họa, sự hiển thị của điểm trờn màn hỡnh với tọa độ phài là số nguyờn.

- Phõn biệt thế nào là hệ tọa độ thế giới thực, hệ tọa độ thiết bị và hệ tọa độ chuẩn.

- Cần lưu ý về hệ số gúc của đường thẳng. Bởi vỡ, với hệ số gúc khỏc nhau thỡ giải thuật cú thay đổi. Nhất là trong giải thuật Bresenham.

- Chỳ ý hơn trong cỏch xõy dựng cấu trỳc dữ liệu để lưu tọa độ của cỏc đỉnh đa giỏc

- Cỏc thuật toỏn vẽ đường thẳng: thuật toỏn đơn giản, DDA, bresenham, Midpoint từ đú lập trỡnh vẽ được đường thẳng

- Cỏc thuật toỏn vẽ đường trũn theo cỏch thụng thường, midpoint và bresenham. Từ đú lập trỡnh vẽ đường trũn.

BÀI TẬP CHƯƠNG 2

1. Viết chương trỡnh vẽ bầu trời cú 10.000 điểm sao, mỗi điểm sao xuất hiện với một màu ngẫu nhiờn. Những điểm sao này hiện lờn rồi từ từ tắt cũng rất ngẫu nhiờn. 2. Viết chương trỡnh vẽ đoạn thẳng AB với màu color theo giải thuật DDA. Biết

rằng tọa độ A,B, color được nhập từ bàn phớm. Trang trớ màu nền, ghi chỳ cỏc tọa độ A, B ở hai đầu đoạn thẳng.

3. Tương tự như bài tập 2 nhưng sử dụng giải thuật Bresenham. Lưu ý cỏc trường hợp đặc biệt của hệ số gúc.

4. Tổng hợp bài tập 3, viết chương trỡnh vẽ đường thằng bằng giải thuật Bresenham cho tất cả cỏc trường hợp của hệ số gúc. Lưu ý xột trường hợp đặc biệt khi đường thẳng song song với trục tung hay với trục hoành.

5. Viết chương trỡnh nhập tọa độ 3 điểm A, B, C từ bàn phớm. Tỡm tọa độ điểm D thuộc AB sao cho CD vuộng gúc AB. Vẽ đoạn thẳng AB và CD.

6 Viết chương trỡnh xột vị trớ tương đối của 2 đoạn thẳng AB và CD. Biết rằng trong màn hỡnh đồ họa đoạn thẳng AB và CD được gọi là cắt nhau khi hai điểm A, B ở về hai phớa của CD và ngược lại.

7 Viết chương trỡnh vẽ đường trũn theo giải thuật đơn giản ( đối xứng ). 8. Viết chương trỡnh vẽ đường trũn theo giải thuật Bresenham.

9. Viết chương trỡnh vẽ đường trũn theo giải thuật MidPoint.

10. Viết chương trỡnh vẽ một đường trũn tõm O bỏn kớnh R. Vẽ cỏc đường trũn đồng tõm với O, cú bỏn kớnh chạy từ 1 đến R. Sau đú xoỏ cỏc đường trũn đồng tõm này và vẽ cỏc đường trũn đồng tõm khỏc đi từ R đến 1.

11. Viết chương trỡnh vẽ một đường trũn tõm O bỏn kớnh R. Hóy vẽ một đoạn thẳng từ tõm O độ dài R. Hóy quay đoạn thẳng này quanh đường trũn.

12. Viết chương trỡnh vẽ một hỡnh chữ nhật, một hỡnh vuụng và một hỡnh bỡnh hành.

Yờu cầu chỳ thớch tọa độ cỏc đỉnh.

13. Viết chương trỡnh vẽ một tam giỏc. Tọa độ cỏc đỉnh được nhập từ bàn phớm, mỗi cạnh cú một màu khỏc nhau.

CHƯƠNG 3. CÁC THUẬT TOÁN Tễ MÀU 3.1. Cỏc hệ màu

Việc nghiờn cứu màu sắc bao gồm nhiều lĩnh vực như: quang học, sinh lý học, tõm lý học và cỏc nhõn tố khỏc thuộc về con người. Vỡ thế, cú rất nhiều quan niệm cũng như thành ngữ về khoa học cỏc màu sắc. Đối với những người làm tin học, vấn đề mà họ quan tõm là mối tương tỏc qua lại giữa sự cảm nhận màu sắc của con người với cỏc bộ phận phần cứng hiển thị màu sắc của màn hỡnh mỏy tớnh, và với cỏc phần mềm thiết kế trờn nú. Bảng sau trỡnh bày về mối quan hệ này.

Bảng 3.1 – Mối quan hệ giữa sự cảm nhận màu của con người với phần cứng và phần mềm đồ họa.

Sự cảm nhận của con người

Đặc điểm phần cứng Đặc điểm phần mềm

Màu sắc Cỏc màu hiển thị gốc Thuật toỏn trờn khụng gian màu

Sắc độ màu (Hue) Bước súng

(WaveLength)

Độ bóo hũa

(Saturation)

Sự thuần nhất của màu sắc

Độ sỏng, độ chúi Cường độ sỏng Hiệu chỉnh gamma

Độ rung của màn hỡnh Tốc độ làm tươi (refresh)

Khụng gian màu (color space) được dựng để định ra cỏc màu hiển thị trờn mỏy tớnh. Chỳng làm đơn giản húa cỏc thao tỏc tớnh toỏn cho việc chuyển đổi màu sắc (color transformation). Cỏc khụng gian màu được thiết kế dựa trờn cơ sở của bộ phỏt sinh màu của phần cứng hoặc dựa trờn sự cảm nhận màu sắc của mắt. Với mỗi ứng dụng, việc chọn sử dụng khụng gian màu tựy thuộc vào cỏc yếu tố: độ chớnh xỏc mà cỏc nhà thiết kế cần kiểm soỏt màu sắc, yờu cầu về sự tương tỏc giữa cỏc màu sắc và tốc độ cỏc tớnh toỏn cho ứng dụng đú.

3.1.1. Khụng gian RGB (Red - Green - Blue).

Khụng gian RGB mụ tả màu sắc bằng ba thành phần Red, Green, Blue. Khụng gian này được minh họa bởi một khối lập phương với cỏc trục chớnh R, G, B. Mỗi màu trong khụng gian được biểu diễn như là một vector thụng qua ba vector cơ sở là Red, Green, Blue. Tổ hợp của cỏc vector này tạo thành một màu mới.

Trong khối lập phương, mỗi màu gốc (Red, Green, Blue) được đặt vào đỉnh của khối lập phương và nằm trờn trục chớnh của khụng gian. Gúc đối diện là màu bự với màu gốc. Hai màu bự nhau là hai màu mà khi kết hợp tạo thành màu trắng (White) hay màu xỏm (Gray). Như vậy Cyan đối diện với Red, Magenta đối diện với Green, Yellow đối diện với Blue. Giỏ trị xỏm nằm trờn được chộo nối cỏc đỉnh (0,0,0) và (1,1,1) (Black và White) của khối lập phương. Khi kết hợp hai màu với nhau thỡ màu sinh ra cú vector bằng tổng cỏc vector thành phần.

Ưu điểm:

- Khụng gian RGB là một chuẩn cụng nghiệp cho cỏc thao tỏc đồ họa mỏy tớnh. Cỏc thao tỏc màu sắc cú thể được tớnh toỏn trờn cỏc khụng gian màu khỏc nhưng cuối cựng cần phải chuyển về khụng gian RGB để cú thể hiển thị trờn màn hỡnh mỏy tớnh (do thiết kế phần cứng dựa trờn mụ hỡnh RGB).

- Cú thể chuyển đổi giữa khụng gian RGB với cỏc khụng gian màu khỏc: CIE, HSL, HSV…

- Cỏc thao tỏc tớnh toỏn trờn khụng gian RGB thường đơn giản hơn.

Nhược điểm:

- Cỏc giỏ trị RGB của một màu là khỏc nhau đối với màn hỡnh khỏc nhau. - Sự mụ tả cỏc màu trong thế giới thực đối với khụng gian RGB cũn nhiều hạn chế vỡ khụng gian RGB khụng hoàn toàn phự hợp với sự cảm nhận màu sắc của con người.

3.1.2. Khụng gian màu CMY (Cyan - Magenta - Yellow)

Green (0,1,0) Red (1,0,0) Yellow (1,1,0) Cyan (0,1,1) Blue (0,0,1) Magenta (1,0,1) Black (0,0,0) White (1,1,1) R G B 1 1 1 Hỡnh 3.1. Mụ hỡnh khụng gian màu RGB Grayscal e

Tương tự như khụng gian màu RGB nhưng 3 thành phần chớnh là Cyan - Magenta - Yellow. Do đú, tọa độ cỏc màu trong khụng gian CMY trỏi ngược với khụng gian RGB. Vớ dụ: màu White cú cỏc thành phần là (0,0,0), màu Black (1,1,1), màu Cyan (1,0,0),....

3.1.3. Khụng gian HSL (Hue – Saturation - Lightness)

Khụng gian này chỳ trọng đến sự cảm nhận màu sắc của mắt (Hue, Saturation, Lightness) hơn khụng gian RGB. Tuy nhiờn khụng gian HSL cũng chỉ là một phộp biến đổi gần đỳng của khụng gian RGB . Khụng gian HSL vẫn cũn phụ thuộc vào phần cứng mà khụng hoàn toàn dựa trờn sự cảm nhận màu sắc của mắt.

Khụng gian HSL được biểu diễn trong hệ tọa độ trụ, hỡnh minh họa là hai hỡnh nún ỳp vào nhau. H (Hue) là tọa độ ứng với gúc quay, S (Saturation) là tọa độ gốc, L (Lightness) là trục thẳng đứng. Hầu hết cỏc màu đạt bóo hũa khi S=1, L=0.5 (hỡnh 3.3)

Ưu điểm:

- Khụng gian HSL gần với sự cảm nhận cỏc thuộc tớnh màu sắc của con người hơn khụng gian RGB (tuy cỏch tiếp cận đó đơn giản húa hơn nhiều). Cỏc màu được xỏc định dễ dàng hơn.

- Việc kiểm soỏt cỏc màu cơ sở HSL dễ hơn cho những người mới làm quen với cỏc chương trỡnh đồ họa.

Nhược điểm: 46 Magenta (0,1,0) Cyan (1,0,0) Blue (1,1,0) Red (0,1,1) Yellow (0,0,1) (1,0,1)Green White (0,0,0) Black (1,1,1) R G B 1 1 1

Hỡnh 3.2. Mụ hỡnh khụng gian màu CMY

Grayscal e

- Việc thờm vào một vector khụng thể thực hiện đơn giản như khụng gian RGB. Cỏc thao tỏc lượng giỏc khi biến đổi sẽ ảnh hưởng lớn đến tốc độ của chương trỡnh đồ họa.

- Cần phải qua hiệu chỉnh gamma trước khi hiển thị ra màn hỡnh.

3.1.4. Khụng gian HSV (Hue – Staturation – Values)

Khụng gian HSV thực chất cũng chỉ là một sự biến đổi khỏc của khụng gian RGB. Khụng gian HSV được biểu diễn bởi hỡnh lập phương RGB quay trờn đỉnh Black của nú tạo thành hỡnh nún. H (Hue) là gúc quay quanh trục Values, S (Saturation) đi từ 0 đến 1, trục V (Values) do vậy tương ứng với đường chộo nối đỉnh White và Black (hỡnh 3.4)

Theo cỏch này, cỏc màu đạt bóo hũa khi S=1 và V=1. Trong khụng gian HSV cỏc màu được chuẩn húa về số cỏc gam (gamut) màu của thiết bị hiển thị.

Ưu điểm:

- Khụng gian HSV dễ dàng đỏp ứng cỏc màu sắc của cỏc chương trỡnh đồ họa do được xõy dựng dựa trờn luật trộn màu của người họa sĩ.

- Do khụng cần sự biến đổi lượng giỏc khi muốn chuyển sang khụng gian RGB nờn khụng gian HSV co nhiều thuận lợi về mặt tớnh toỏn hơn so với khụng gian HSL. L (lightness) S (Saturation) H (Hue angle) L=0 (Black) L=1 (White) Blue Cyan Green Yellow Red Magenta L=0.5 Hỡnh 3.3. Mụ hỡnh khụng gian HSL Grayscale

Nhược điểm:

- Cần cú phộp hiệu chỉnh gamma.

3.1.5. So sỏnh giữa cỏc khụng gian màu.

Bảng 3.2 – So sỏnh giữa cỏc khụng gian màu.

RGB HSL HSV

Là chuẩn cụng nghiệp cho cỏc thao tỏc đồ họa mỏy tớnh. Là hỡnh thức biến đổi khỏc của khụng gian RGB. Là hỡnh thức biến đổi khỏc của khụng gian RGB.

Liờn hệ trực tiếp với phần cứng.

Liờn hệ gần hơn với sự cảm nhận màu sắc của con người.

Liờn hệ gần hơn với sự cảm nhận màu sắc của con người.

Là chuyển đổi cuối cựng của tất cả cỏc nhu cầu hiển thị.

Đũi hỏi cỏc phộp biến đổi phức tạp.

Đó đơn giản húa cỏc thao tỏc tớnh toỏn.

Phụ thuộc thiết bị hiển thị.

Độc lập với thiết bị hiển thị.

Độc lập với thiết bị hiển

Một phần của tài liệu Tìm hiểu về đồ họa máy tính ppt (Trang 35 - 177)

Tải bản đầy đủ (DOC)

(177 trang)
w