kỹ thuật đồ họa

60 99 0
kỹ thuật đồ họa

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

KỸ THUẬT ĐỒ HỌA Chương CÁC GIẢI THUẬT SINH THỰC THỂ CƠ SỞ Giải thuật sinh đường thẳng thông thường Giải thuật thông thường: void dline(int x1,int y1, int x2,int y2, int color) { float y; int x; for (x=x1; x điểm B chọn yi+1 = yi  d < điểm A chọn yi+1 = yi + Trường hợp d = chọn điểm A, B Sử dụng phương pháp biểu diễn không tường minh f(x,y)= ax +by +c =0 (1) dx =x 2-x1 dy =y2-y1 Biểu diễn tường minh: y= (dy/dx)x +B hay f(x,y)=0= xdy - ydx +Bdx (2) So sánh (1) (2) ta có a=dy, b=-dx c= Bdx Có f(x,y)=0 với (x,y) thuộc đường thẳng Đặt di=f(xi+1,yi+1/2) = a(xi+1) +b(yi +1/2) +c  Nếu chọn A (d0) M tăng theo x di+1=f(xi+2,yi+1/2) = a(xi+2) +b(yi +1/2) +c di+1 - di = a Hay di+1 = di + dy Tính d1 ? d1 = f(x1+1,y1+1/2) = a(x1+1) +b(y1 +1/2) +c = ax1 +by1 +c +a +1/2 b = f(x1,y1) +a +b/2 Có (x1,y1) điểm bắt đầu, nằm đoạn thẳng nên f(x1,y1) = Vậy d1 = a+ b/2 = dy - dx/2 Giải thuật sinh đường tròn_Bresenham /* Thuat toan Bresenham de ve duong tron */ #include #include #define pc(xc,yc,x,y) { putpixel(xc + x, yc + y, color); putpixel(xc x, yc y, color); putpixel(xc -y, yc +x, color); putpixel(xc +y, yc -x, color); } void Bresenham_Circle(int xc, int yc, int Radius, int color){ int x, y, p; x = 0; y = Radius; p = - * Radius; pc(xc,yc, Radius,0); //ve diem dac biet while (x < y){ if (d < 0) p += * x + 6; else{ p += * (x-y) + 10; y ; } x++; pc(xc,yc, x,y); pc(xc,yc, y,x); } pc(xc,yc, y,y); // ve diem phan giac x=y } void main(){ int gr_drive = DETECT, gr_mode; initgraph(&gr_drive, &gr_mode, ""); Bresenham_Circle(getmaxx() / 2, getmaxy() / 2, 150, 4); getch(); closegraph(); } 10 Câu 5: Giải thuât Midpoint sinh đương tròn Thuât toán: Void Mid_circle ( int xc, int yc, int Radius, int color) { Int x,y,d; X=0; Y=Radius; D=1-Radius; While (x

Ngày đăng: 01/07/2016, 17:53

Từ khóa liên quan

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan