I.T h u ật toán v ẽ dường tròn Phương trình đường tròn có dạng: (x-xc)2 + (y-yc)2 = r2 Pt đường tròn có tâm ở gốc tọa độ: x2+y2 =r2 Do tính đôi xứng của đường tròn nên ta chỉ cần v ẽ cung Vi hoặc 1/8 void put8pixel(int xc, int yc, int X, int y) putpixel(x+xc, y+yc, color); putpixel(y+xc, x+yc, color); puipỉxel(y+xc, -x+yc, color); putpixel(x+xc, -y+yc, color); putpixel(-x+xc, -y+yc, color); putpixel(-y+xc, -x+yc, color); putpixel(-y+xc, x+yc, color); putpixel(-x+xc, y+yc, color); l.Thuâc toán Bresenham 1 Giả sử tại bước i đã v ẽ được điểm (xi,yi) Điểm cần v ẽ k ê tiếp (xi+1, yi+1) là: (xi +1, yi) hay (xi +1, yi -1) Giá trị y thực sự thuộc đường tròn ứng với xi là: y 2 = 1-2 - (xi +1)2 Gọi d l = yi2 - y2 = yi2 -r2 +(xi +1)2 d2= y2 - (yi -1)2 = r2 - (xi +1)2 - (yi -1)2 Pi = dl-d2 = yi2 - r2 +(xi +1)2 -r2 + (xi +1)2 +(y i-l)2 = 2(xi +1)2 + yi2 +(yi -1)2 -2r2 Pi+1 - pi = 2 (x i+ l +1)2 + yi+12 + (yi+1 -1)2 - 2r2 - 2(xi +1)2 - yi2 - (yi -1)2 + 2r2 = 4xi + 6 + 2(yi+12 -y i2 ) -2(yi+l-yỉ) ^ Pi+1 = pi+4xi + 6 + 2(yi+12 - yi2) -2(yi+1-yi) V ậy: + n ê u pi < 0 thì y i+ 1 = yi, khi đó pi+1 = p i+ 4 x i + 6 +N êu pi > = thì yi+1 = yi-1, khi đó pi+1 = pi + 4(xi-yi)+10 Giá trị pi tại điểm đầu tiên (x l,y l) = (0,r) là: P1 = 2+r2+(r-l)2 - 2r2=3-2r void CircleBres(int xc, int yc, int r) 2 int x,y,p; x=0; y=r; p=3-2*r; while (x<=y) { put8pixel(xc,yc,x,y); if(p<0) p+ =4*x+6; else { p+ = 4*(x-y) +10; y - ; } X + + ; }} 2.Thuât toán Midpoint Gọi F(x,y) = x2+y2-r2, ta CÓ: F (x,y ){<0 nếu (x,y) nằm Irong đường tròn =0 nếu (x,y) thuộc đường tròn >0 nếu (x,y) nằm ngoài đường tròn Chọn điểm bắt đầu v ẽ là (0,r) Giả sử đã v ẽ được điểm (xi,yi), Điểm cần v ẽ kê tiếp (x i+ l,y i+ l) là s hay p 3
댓글 (0)
댓글이 없습니다. 첫 댓글을 남겨보세요!