tổng hợp code đồ họa máy tính cho sinh viên
1 ********************************** DDA_line //trường hợp tổng quát k theo m #include<graphics.h> #define Round(a)(int )(a+0.5) #define DELAY 10 Int color = RED; Void DDA_line(int x1,int y1,int x2,int y2) { int x,dx,dy; float y; x=1; y=y1; dx=x2-x1; dy=y2-y1; float m=(float)dy/dx; putpixel(x,Round(y),color); while(x<x2) { DELAY(10); x++; y+=m; putpixel(x,Round(y),color); } } void main() { int gd,gm=0; gd=DETECT; initgraph(&gd,&gm,"C://TC//BGI"); setbkcolor(GREEN); int xA,xB,yB,yA; cout<<"nhap diem A\n "; cout<<"xA= ";cin>>xA; //50 cout<<"yA= ";cin>>yA; //100 cout<<"nhap diem B \n"; cout<<"xB= ";cin>>xB; //130 cout<<"yB= ";cin>>yB; //200 DDA_line (xA,yA, xB, yB); getch(); closegraph(); } 2 1.1 Cho điểm A có tọa độ (100,50) và điểm B có tọa độ (200,130). - Trình bày thuật toán DDA tương ứng để vẽ đoạn thẳng AB (trình bày trường hợp hệ số góc 0<|m|<1). - Viết hàm tương ứng để vẽ đoạn thẳng AB với màu bất kỳ. - Viết hàm main() để kiểm nghiệm. #include <conio.h> #include <graphics.h> #include <math.h> #include <iostream.h> #include <stdio.h> #include <math.h> #include <stdlib.h> #define Round(a) long(a+0. 005) // lam tron so void DDA(int x1, int y1, int x2, int y2, int C) { int x,y,dx,dy; Randomize(); y=y1; dx = x2 - x1; dy = y2 - y1; float m = float (y2 - y1)/(x2 - x1); //Ve doan thang co HSG 0<m<1 if(0 <= m && m <= 1) { for(int i = 1; i < abs(x2 - x1); i++) { x++; y += m; putpixel(x, Round(y), random(7)); } cout<<"m1= "<<m; } } void main() { int gd,gm=0; gd=DETECT; initgraph(&gd,&gm,"C://TC//BGI"); setbkcolor(GREEN); DDA(100,50,200,130,random(7)); getch(); closegraph(); } 3 1. 2Cho điểm A có tọa độ (50,100) và điểm B có tọa độ (130,200). - Trình bày thuật toán DDA tương ứng để vẽ đoạn thẳng AB (trình bày trường hợp hệ số góc |m|≥1). - Viết hàm tương ứng để vẽ đoạn thẳng AB với màu bất kỳ. Viết hàm main() để kiểm nghiệm. #include <conio.h> #include <graphics.h> #include <math.h> #include <iostream.h> #include <stdio.h> #include <math.h> #include <stdlib.h> #define Round(a) long(a+0. 005) void DDA(int x1, int y1, int x2, int y2, int C) { int x,y,dx,dy; Randomize(); y=y1; dx = x2 - x1; dy = y2 - y1; float m = float (y2 - y1)/(x2 - x1); //Ve doan thang co HSG |m|>=1 if(abs(m) >= 1) { for(int i = 1; i < abs(y2 - y1); i++) { y++; x += 1/m; putpixel(x, round(y), random(7)); } cout<<"m2= "<<m; } } void main() { int gd,gm=0; gd=DETECT; initgraph(&gd,&gm,"C://TC//BGI"); setbkcolor(GREEN); DDA(50,100,130,200,random(7)); getch(); closegraph(); } 1.3. Viết chương trình gồm: 4 - Hàm vẽ đoạn thẳng AB với màu bất kỳ theo thuật toán DDA ứng với trường hợp hệ số góc m của đường thẳng đi qua A, B thỏa mãn |m|≥1. - Hàm nhập tọa độ 2 điểm A, B trên màn hình sao cho đường thẳng đi qua A, B có hệ số góc m với |m|≥1. - Hàm main() nhập màu nét vẽ và vẽ đoạn thẳng AB với màu vừa nhập. #include <conio.h> #include <graphics.h> #include <math.h> #include <iostream.h> #include <stdio.h> #include <math.h> #define round(a) long(a+0. 005) void DDA(int x1, int y1, int x2, int y2, int C) { int x,y,dx,dy; y=y1; dx = x2 - x1; dy = y2 - y1; float m = float (y2 - y1)/(x2 - x1); //Ve doan thang co HSG |m|>=1 if(abs(m) >= 1) { for(int i = 1; i < abs(y2 - y1); i++) { y++; x += 1/m; putpixel(x, round(y), 7); } cout<<"m2= "<<m; } } void main() { int gd,gm=0; gd=DETECT; initgraph(&gd,&gm,"C://TC//BGI"); setbkcolor(GREEN); int xA,xB,yB,yA; cout<<"nhap diem A\n "; cout<<"xA= ";cin>>xA; //50 cout<<"yA= ";cin>>yA; //100 cout<<"nhap diem B \n"; cout<<"xB= ";cin>>xB; //130 cout<<"yB= ";cin>>yB; //200 DDA(xA,yA, xB, yB, 7); getch(); closegraph(); } 1.4. Viết chương trình gồm: 5 - Hàm vẽ đoạn thẳng AB với màu bất kỳ theo thuật toán DDA ứng với trường hợp hệ số góc m của đường thẳng đi qua A, B thỏa mãn 0<|m|<1. - Hàm nhập tọa độ 2 điểm A, B trên màn hình sao cho đường thẳng đi qua A, B có hệ số góc m với 0<|m| <1. - Hàm main() nhập màu nét vẽ và vẽ đoạn thẳng AB. #include <conio.h> #include <graphics.h> #include <math.h> #include <iostream.h> #include <stdio.h> #include <math.h> #define round(a) long(a+0. 005) void DDA(int x1, int y1, int x2, int y2, int C) { int x,y,dx,dy; y=y1; dx = x2 - x1; dy = y2 - y1; float m = float (y2 - y1)/(x2 - x1); //Ve doan thang co HSG 0<m<1 if(0 <= m && m <= 1) { for(int i = 1; i < abs(x2 - x1); i++) { x++; y += m; putpixel(x, round(y), C); } cout<<"m1= "<<m; } } void main() { int gd,gm=0; gd=DETECT; initgraph(&gd,&gm,"C://TC//BGI"); setbkcolor(GREEN); int xA,xB,yB,yA,mt; cout<<"nhap diem A\n "; cout<<"xA= ";cin>>xA; //100 cout<<"yA= ";cin>>yA; //50 cout<<"nhap diem B \n"; cout<<"xB= ";cin>>xB; //200 cout<<"yB= ";cin>>yB; //130 cout<<”nhap mau ve”; cin>>mt; DDA(xA,yA, xB, yB, mt); getch(); closegraph(); } 6 ****************************************** BR_ line // trường hợp tổng quát k theo m #include <conio.h> #include <graphics.h> #include <math.h> #include <iostream.h> #include <stdio.h> #include <math.h> #define Round(a) long(a+0. 005) // lam tron so void Bre_line(int x1, int y1, int x2, int y2, int color) { int x,y,dx,dy,p; y=y1; dx = x2 - x1; dy = y2 - y1; p=-dy-2*dx; for(x=x1; x<=x2;x++) { putpixel(x,Round(y),7); if(p>=0) { p+=-2*dy-2*dx; x ; } else { p+=-2*dx; } } } void main() { int gd,gm=0; gd=DETECT; initgraph(&gd,&gm,"C://TC//BGI"); setbkcolor(GREEN); int xA,xB,yB,yA; cout<<"nhap diem A\n "; cout<<"xA= ";cin>>xA; cout<<"yA= ";cin>>yA; cout<<"nhap diem B \n"; cout<<"xB= ";cin>>xB; cout<<"yB= ";cin>>yB; Bre_line(xA,yA, xB, yB, 7); getch(); closegraph(); } 7 1.5. Cho điểm A có tọa độ (100,50) và điểm B có tọa độ (200,130). - Trình bày thuật toán Bresenham tương ứng để vẽ đoạn thẳng AB (trình bày trường hợp hệ số góc 0<|m| <1). - Hãy tính tọa độ của 15 điểm đầu tiên khi vẽ đoạn thẳng AB - Viết hàm tương ứng để vẽ đoạn thẳng AB với màu bất kỳ. - Viết hàm main() để kiểm nghiệm. #include <conio.h> #include <graphics.h> #include <math.h> #include <iostream.h> #include <stdio.h> #include <math.h> #define Round(a) long(a+0. 005) void Bre_line(int x1, int y1, int x2, int y2, int color) { int x,y,dx,dy,p; y=y1; dx = x2 - x1; dy = y2 - y1; p=2*dy-dx; // vẽ đường thẳng với 0<m<1 for(x=x1; x<=x2;x++) { putpixel(x,Round(y),7); if(p>=0) { p+=2*dy-2*dx; y++; } else { p+=2*dy; } } } void main() { int gd,gm=0; gd=DETECT; initgraph(&gd,&gm,"C://TC//BGI"); setbkcolor(GREEN); Bre_line(100,50, 200,130, 7); getch(); closegraph(); } 8 1.6. Cho điểm A có tọa độ (50,100) và điểm B có tọa độ (130,200). - Trình bày thuật toán Bresenham tương ứng để vẽ đoạn thẳng AB (trình bày trường hợp hệ số góc |m|≥1). - Hãy tính tọa độ của 15 điểm đầu tiên khi vẽ đoạn thẳng AB - Viết hàm tương ứng để vẽ đoạn thẳng AB với màu bất kỳ. - Viết hàm main() để kiểm nghiệm. #include <conio.h> #include <graphics.h> #include <math.h> #include <iostream.h> #include <stdio.h> #include <math.h> #define Round(a) long(a+0. 005) void Bre_line(int x1, int y1, int x2, int y2, int color) { int x,y,dx,dy,p; y=y1; dx = x2 - x1; dy = y2 - y1; p=dy-2*dx; // vẽ đường thẳng với m>1 for(x=x1; x<=x2;x++) { putpixel(x,Round(y),7); if(p<=0) { p+=2*dy-2*dx; x++; } else { p+=-2*dx; } } } void main() { int gd,gm=0; gd=DETECT; initgraph(&gd,&gm,"C://TC//BGI"); setbkcolor(GREEN); Bre_line(50,100, 130,200, 7); getch(); closegraph(); } 9 1. 7. Viết chương trình gồm: - Hàm vẽ đoạn thẳng AB với màu bất kỳ theo thuật toán Bresenham ứng với trường hợp hệ số góc m của đường thẳng đi qua A, B thỏa mãn |m|≥1. - Hàm nhập tọa độ 2 điểm A, B trên màn hình sao cho đường thẳng đi qua A, B có hệ số góc m với |m|≥1. - Hàm main() nhập màu nét vẽ và vẽ đoạn thẳng AB với màu vừa nhập. #include <conio.h> #include <graphics.h> #include <math.h> #include <iostream.h> #include <stdio.h> #include <math.h> #define Round(a) long(a+0. 005) void Bre_line(int x1, int y1, int x2, int y2, int color) { int x,y,dx,dy,p; y=y1; dx = x2 - x1; dy = y2 - y1; p=dy-2*dx; // vẽ đường thẳng với m>1 for(x=x1; x<=x2;x++) { putpixel(x,Round(y),color); if(p<=0) { p+=2*dy-2*dx; x++; } else { p+=-2*dx; } } } void main() { int gd,gm=0; gd=DETECT; initgraph(&gd,&gm,"C://TC//BGI"); setbkcolor(GREEN); int xA,xB,yB,yA, mt; cout<<"nhap diem A\n "; cout<<"xA= ";cin>>xA; cout<<"yA= ";cin>>yA; cout<<"nhap diem B \n"; cout<<"xB= ";cin>>xB; cout<<"yB= ";cin>>yB; cont<<”nhap mau ve”; cin>>mt; Bre_line(xA,yA,xB,yB,mt); getch(); closegraph(); } 1. 8. Viết chương trình gồm: 10 - Hàm vẽ đoạn thẳng AB với màu bất kỳ theo thuật toán Bresenham ứng với trường hợp hệ số góc m của đường thẳng đi qua A, B thỏa mãn 0<|m|<1. - Hàm nhập tọa độ 2 điểm A, B trên màn hình sao cho đường thẳng đi qua A, B có hệ số góc m với 0<|m| <1. - Hàm main() nhập màu nét vẽ và vẽ đoạn thẳng AB. #include <conio.h>#include <graphics.h>#include <math.h> #include <iostream.h>#include <stdio.h>#include <math.h> #define Round(a) long(a+0. 005) void Bre_line(int x1, int y1, int x2, int y2, int color) { int x,y,dx,dy,p; y=y1; dx = x2 - x1; dy = y2 - y1; p=2*dy-dx; // vẽ đường thẳng với 0<m<1 for(x=x1; x<=x2;x++) { putpixel(x,Round(y),color); if(p>=0) { p+=2*dy-2*dx;y++; } else { p+=2*dy; } } } void main() { int gd,gm=0; gd=DETECT; initgraph(&gd,&gm,"C://TC//BGI"); setbkcolor(GREEN); int xA,xB,yB,yA, mt; cout<<"nhap diem A\n "; cout<<"xA= ";cin>>xA; //100 cout<<"yA= ";cin>>yA; //50 cout<<"nhap diem B \n"; cout<<"xB= ";cin>>xB; //200 cout<<"yB= ";cin>>yB; //130 cont<<”nhap mau ve”; cin>>mt; //7 Bre_line(xA,yA,xB,yB,mt); getch(); closegraph(); } ***************************************** [...]... tomauloang(200,200,30,15); getch(); 22 5.không gian 2D 5.2 Trên mặt phẳng tọa độ thực Oxy, cho hàm số y=2x+3 Giả sử cần vẽ đồ thị của hàm số trên đoạn [5,5] lên màn hình với khung nhìn (50,10)x(120,70) - Hãy tính tọa độ của gốc tọa độ O trên màn hình trong trường hợp này - Vẽ đồ thị hàm số trên cùng với hệ trục tọa độ Oxy -#include "iostream.h" #include "stdio.h" . Bresenham tương ứng để vẽ đoạn thẳng AB (trình bày trường hợp hệ số góc 0<|m| <1). - Hãy tính tọa độ của 15 điểm đầu tiên khi vẽ đoạn thẳng AB - Viết hàm tương ứng để vẽ đoạn thẳng AB với. thuật toán Bresenham tương ứng để vẽ đoạn thẳng AB (trình bày trường hợp hệ số góc |m|≥1). - Hãy tính tọa độ của 15 điểm đầu tiên khi vẽ đoạn thẳng AB - Viết hàm tương ứng để vẽ đoạn thẳng AB với. toán Midpoint tương ứng để vẽ đoạn thẳng AB (trình bày trường hợp hệ số góc 0<|m|<1). - Hãy tính tọa độ của 15 điểm đầu tiên khi vẽ đoạn thẳng AB - Viết hàm tương ứng để vẽ đoạn thẳng AB với