1. Trang chủ
  2. » Công Nghệ Thông Tin

code đồ họa các thuật toán đường thẳng đường tròn tô màu loang

11 229 0

Đ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

Thông tin cơ bản

Định dạng
Số trang 11
Dung lượng 22,59 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Thuật toán đường thẳng đường tròn , tô màu loang,tô màu biên , tô màu da giác.... ..........................................................................................đồ họa máy tính , các bài tập đồ họa máy tính....

Trang 1

ĐƯỜNG THẲNG

#include<coniọh>

#include<iostream>

#include<graphics.h>

using namespace std;

int color=GREEN;

void ĐĂint x1, int y1, int x2, int y2)

{

int Dx=x2-x1, Dy=y2-y1;

float m=(float)Dx/Dy;

int x=x1;

float y=y1;

putpixel(x,round(y),color);

for(int i=x;i<x2;i++)

{

x++;

y+=m;

putpixel(x,round(y),color);

}

}

void TangChamBR(int x1,int y1,int x2,int

y2)

{

int dx,dy,p,c1,c2;

int x,y;

dx=x2-x1;

dy=y2-y1;

p=2*dy-dx;

c1=2*dy;

c2=2*(dy-dx);

x=x1;

y=y1;

putpixel(x,y,color);

for(int i=x1;i<x2;i++)

{

if(p<0) p+=c1;

else

{

p+=c2;

y++;

}

x++;

putpixel(x,y,color);

}

void TangNhanhBR(int x1,int y1,int x2,int y2) {

int dx,dy,p,c1,c2;

int x,y;

dx=x2-x1;

dy=y2-y1;

p=2*dx-dy;

c1=2*dx;

c2=2*(dx-dy);

x=x1;

y=y1;

putpixel(x,y,color);

for(int i=y1;i<y2;i++) {

if(p<0) p+=c1;

else p+=c2;

x++;

} y++;

putpixel(x,y,color);

}

Trang 2

void GiamChamBR(int x1,int y1,int x2,int

y2)

{

int dx,dy,p,c1,c2;

int x,y;

dx=x2-x1;

dy=y2-y1;

p=-2*dy-dx;

c1=-2*dy;

c2=-2*(dy+dx);

x=x1;

y=y1;

putpixel(x,y,color);

for(int i=x1;i<x2;i++)

{

if(p<0) p+=c1;

else

{

p+=c2;

y ;

}

x++;

putpixel(x,y,color);

}

}

void GiamNhanhBR(int x1,int y1,int x2,int y2) {

int dx,dy,p,c1,c2;

int x,y;

dx=x2-x1;

dy=y2-y1;

p=-2*dx-dy;

c1=-2*dx;

c2=-2*(dy+dx);

x=x1;

y=y1;

putpixel(x,y,color);

for(int i=y1;i<y2;i++) {

if(p<0) p+=c1;

else { p+=c2;

x ;

} y++;

putpixel(x,y,color);

} } int main() {

initwindow(640,480);

ĐĂ2,2,8,4);

//TangChamBR(50,80,200,130);

//TangNhanhBR(50,60,80,120);

//GiamChamBR(50,130,200,80);

GiamNhanhBR(70,80,50,200);

getch();

}

Trang 3

ĐƯỜNG TRÒN BRE

void diem8DTronBR(int x,int y,int xc,int

yc)

{

putpixel(x+xc,y+yc,color);

putpixel(x+xc,-y+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(-y+xc,x+yc,color);

putpixel(-y+xc,-x+yc,color);

}

void bresenhamDTron(int xc,int yc,int r)

{

int x,y,p;

x=0;

y=r;

diem8DTronBR(x,y,xc,yc);

p=3-2*r;

while(x<y)

{

if(p<0) p+=4*x+6;

else

{

p+=4*(x-y)+10;

y ;

}

x++;

diem8DTronBR(x,y,xc,yc);

}

}

int main()

{

initwindow(640,480);

bresenhamDTron(200,200,80);

getch();

ĐƯỜNG TRÒN MIDPOINT

void diem8DTronMP(int x,int y,int xc,int yc) {

putpixel(x+xc,y+yc,color);

putpixel(x+xc,-y+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(-y+xc,x+yc,color);

putpixel(-y+xc,-x+yc,color);

} void midpointDTron(int xc,int yc,int r) {

int x,y,p;

x=0;

y=r;

diem8DTronMP(x,y,xc,yc);

p=1-r;

while(x<y) {

if(p<0) p+=2*x+3;

else { p+=2*(x-y)+5;

y ;

} x++;

diem8DTronMP(x,y,xc,yc);

} } int main() {

initwindow(640,480);

midpointDTron(200,200,80);

getch();

}

Trang 4

CUNG TRÒN (8- Cung)

void diem(int x,int y,int xc,int yc)

{

putpixel(x+xc,y+yc,color);

}

void Cung1(int xc,int yc,int r)

{

int x,y,p;

x=0;

y=r;

diem(x,y,xc,yc);

p=1-r;

while(x<y)

{

if(p<0) p+=2*x+3;

else

{

p+=2*(x-y)+5;

y ;

}

x++;

diem(x,y,xc,yc);

}

}

void Cung2(int xc,int yc,int r)

{

int x,y,p;

x=0;

y=r;

diem(x,y,xc,yc);

p=1-r;

while(abs(x)<=y)

{

if(p<0) p+=2*abs(x)+3;

else

{

p+=2*(abs(x)-y)+5;

y ;

}

x ;

diem(x,y,xc,yc);

}

}

void Cung3(int xc,int yc,int r) {

int x,y,p;

y=0;

x=-r;

diem(x,y,xc,yc);

p=1-r;

while(abs(y)<=abs(x)) {

if(p<0) p+=2*abs(y)+3; else

{ p+=2*(abs(y)-abs(x))+5; x++;

} y++;

diem(x,y,xc,yc);

} }

void Cung4(int xc,int yc,int r) {

int x,y,p;

y=0;

x=-r;

diem(x,y,xc,yc);

p=1-r;

while(abs(y)<=abs(x)) {

if(p<0) p+=2*abs(y)+3; else

{ p+=2*(abs(y)-abs(x))+5; x++;

} y ;

diem(x,y,xc,yc);

} }

Trang 5

void Cung5(int xc,int yc,int r)

{

int x,y,p;

x=0;

y=-r;

diem(x,y,xc,yc);

p=1-r;

while(abs(x)<=abs(y))

{

if(p<0) p+=2*abs(x)+3;

else

{

p+=2*(abs(x)-abs(y))+5;

y++;

}

x ;

diem(x,y,xc,yc);

}

}

void Cung6(int xc,int yc,int r)

{

int x,y,p;

x=0;

y=-r;

diem(x,y,xc,yc);

p=1-r;

while(abs(x)<=abs(y))

{

if(p<0) p+=2*abs(x)+3;

else

{

p+=2*(abs(x)-abs(y))+5;

y++;

}

x++;

diem(x,y,xc,yc);

}

}

void Cung7(int xc,int yc,int r) {

int x,y,p; y=0;

x=r;

diem(x,y,xc,yc);

p=1-r;

while(abs(y)<x) {

if(p<0) p+=2*abs(y)+3;

else { p+=2*(abs(y)-x)+5; x ; }

y ;

diem(x,y,xc,yc);

} } void Cung8(int xc,int yc,int r) {

int x,y,p; y=0; x=r;

diem(x,y,xc,yc);

p=1-r;

while(abs(y)<x) {

if(p<0) p+=2*abs(y)+3;

else { p+=2*(abs(y)-x)+5; x ; }

y++;

diem(x,y,xc,yc);

} } int main() {

initwindow(640,480);

Cung1(200,200,80);

Cung2(200,200,80);

Cung3(200,200,80);

Cung4(200,200,80);

Cung5(200,200,80);

Cung6(200,200,80);

Cung7(200,200,80);

Cung8(200,200,80);

getch();

Trang 6

TÔ MÀU LOANG

int mt=RED;

int mb=WHITE;

using namespace std;

void MauLoang4(int x,int y,int mb,int mt)

{

while(getpixel(x,y)!=mb &&

getpixel(x,y)!=mt)

{

putpixel(x,y,mt);

MauLoang4(x-1,y,mb,mt);

MauLoang4(x+1,y,mb,mt);

MauLoang4(x,y-1,mb,mt);

MauLoang4(x,y+1,mb,mt);

}

}

void MauLoang8(int x,int y,int mb,int mt)

{

while(getpixel(x,y)!=mb &&

getpixel(x,y)!=mt)

{

putpixel(x,y,mt);

MauLoang8(x-1,y,mb,mt);

MauLoang8(x+1,y,mb,mt);

MauLoang8(x,y-1,mb,mt);

MauLoang8(x,y+1,mb,mt);

MauLoang8(x-1,y+1,mb,mt);

MauLoang8(x-1,y-1,mb,mt);

MauLoang8(x+1,y-1,mb,mt);

MauLoang8(x+1,y+1,mb,mt);

}

}

int main() {

initwindow(500,500);

/*Tô màu đường tròn circle(200,200,80);

MauLoang4(200,200,mb,mt); MauLoang8(200,200,mb,mt);*/ /*Tô màu tam giác

line(100,100,200,200);

line(100,100,300,100);

line(300,100,200,200);

MauLoang4(200,150,mb,mt); MauLoang8(200,150,mb,mt);*/ /*Tô màu hình thang

line(100,100,500,100);

line(100,100,200,300);

line(200,300,300,300);

line(500,100,300,300);

MauLoang4(300,200,mb,mt); MauLoang8(300,200,mb,mt);*/ getch();

}

Trang 7

TÔ MÀU BIÊN

int mb=WHITE;

int mt=RED;

void MauBien(int x, int y, int i, int mb)

{

int x1=x,x2=x;

while(getpixel(x1-1,y)!=mb) x1=x1-1;

while(getpixel(x2+1,y)!=mb) x2=x2+1;

setcolor(mt);

line(x1,y,x2,y);

while(getpixel(x1,y+i)==mb)

x1=x1+1;

if(x1<=x2)

{

x=x1;

y=y+i;

MauBien(x,y,i,mb);

}

}

int main()

{

initwindow(640,480);

/*Tô màu đường tròn

circle(200,200,80);

MauBien(200,200,-1,mb);

MauBien(200,200,1,mb);*/

/*Tô màu tam giác

line(100,100,200,200);

line(100,100,300,100);

line(300,100,200,200);

MauBien(200,150,-1,mb);

MauBien(200,150,1,mb);*/

//Tô màu hình thang

line(100,100,500,100);

line(100,100,200,300);

line(200,300,300,300);

line(500,100,300,300);

MauBien(300,200,-1,mb);

MauBien(300,200,1,mb);

getch();

TÔ MÀU DÒNG QUYÉT

int mt=RED;

int mb=WHITE;

void DongQuetHinhThang(int y1,int y2,int xa,int xb,int xc,int xd)

{ int y=y1,x1,x2;

while(y<=y2) {

x1=(xd-xa)/(y2-y1)*(y-y1)+xa;

x2=(xc-xb)/(y2-y1)*(y-y1)+xb;

setcolor(mt);

line(x1,y,x2,y);

y++;

} } void DongQuetHCN(int l,int r,int t,int b,int mt) {

for(int i=b;i<=t;i++) for(int j=l;j<=r;j++) putpixel(j,i,mt);

} main() { initwindow(640,480);

setcolor(mb);

//DongQuetHinhThang(100,200,100,500,300,200)

; DongQuetHCN(100,300,200,100,mt);

getch();

}

Trang 8

DÒNG QUÉT ĐA GIÁC

struct ToaDo2D

{

int x,y;

};

void Nhap(int &n,ToaDo2D a[])

{

cout<<"\nNhap so dinh cho da giac:";

cin>>n;

for(int i=1; i<=n; i++)

{

cout<<"\n a["<<i<<"].x=";

cin>>a[i].x;

cout<<"\n a["<<i<<"].y=";

cin>>a[i].y;

}

}

void VeDaGiac(int n,ToaDo2D a[])

{

int i,j;

for (i=1; i<=n; i++)

{

if (i==n) j=1;

else j=i+1;

line(a[i].x,a[i].y,a[j].x,a[j].y);

}

}

int min(int a,int b)

{

return (a<b)?a:b;

}

int max(int a,int b)

{

return (a>b)?a:b;

}

void Scanline(int n,ToaDo2D a[]) {

//Tim minx, maxx int x,minx,maxx; minx=a[1].x;

maxx=a[1].x;

for (int i=2; i<=n; i++) {

if (a[i].x<minx) minx=a[i].x;

if (a[i].x>maxx) maxx=a[i].x;

}

//Quet tu minx > maxx for (x=minx+1; x<=maxx-1; x++) {

int m=0,z[50]; //so giao diem //Duyet qua cac canh

for (int i=1; i<=n; i++) {

int t=i+1;

if (i==n) t=1;

int s=i-1;

if (i==1) s=n;

if (x==a[i].x)

{ if((x>min(a[s].x,a[t].x))&&(x<max(a[s].x,a[ t].x)))

{ m++; z[m]=a[i].y;

} else { m++;

z[m]=a[i].y;

m++;

z[m]=a[i].y;

} } else if((x>min(a[i].x,a[t].x))&&(x<max(a[t].x,a[i].x))) { ++m; float r;

r = (a[t].y-a[i].y)/(a[t].x-a[i].x); z[m]=(int)(r*(x-a[i].x))+a[i].y;

}

Trang 9

//Sap xep cac giao diem theo thu tu tang

dan

for (int i=1; i<m; i++)

for (int k=i+1; k<=m; k++)

if (z[i]>z[k])

{

int tg=z[i];

z[i]=z[k];

z[k]=tg;

}

//To mau tu giao diem le dem giao

diem chan

for (int k=1; k<=m-1; k++)

if (k%2!=0) line(x,z[k],x,z[k+1]);

}

}

int main()

{

int n,gd=0,gm;

initwindow(640,480);

ToaDo2D a[100];

Nhap(n,a);

VeDaGiac(n,a);

Scanline(n,a);

getch();

}

}

Trang 10

ĐỒ THỊ Y=2*X+3

float xw1, xw2, yw1, yw2, tlx, tly;

int xv1,xv2,yv1,yv2;

void cuaso(float x1, float y1, float x2, float

y2)

{

xw1= x1; yw1=y1;

xw2=x2;yw2=y2;

}

void khungnhin(int x1, int y1, int x2, int

y2)

{

xv1= x1; yv1=y1;

xv2=x2;yv2=y2;

tlx=float(xv2-xv1)/(xw2-xw1);

tly=float(yv2-yv1)/(yw2-yw1);

}

void chuyenden(float x, float y)

{

int xm=(int)(tlx*(x-xw1)+xv1);

int ym=(int)(tly*(yw2-y)+yv1);

moveto(xm,ym);

}

void veden(float x, float y)

{

int xm=(int)(tlx*(x-xw1)+xv1);

int ym=(int)(tly*(yw2-y)+yv1);

lineto(xm,ym);

}

main() { int mh=0;

int mode;

float pi=3.14;

initwindow(640,480);

cuaso(-1,-1.5,0.5,1.5); // tao cua so hien thi anh thuc

khungnhin(240,140,390,240); // khung nhin tren man hinh

line(0,250,640,250);

line(333,0,333,480);

outtextxy(330,247,"0");

float dx=0.01; // buoc nhay float x=xw1;

float y=2*x+3;

chuyenden(x,y);

setcolor(1);

while(x<xw2) {

x+=dx;

y=2*x+3;

veden(x,y);

delay(10);

} getch();

}

Trang 11

ĐỒ THỊ Y=COS X.

float xw1, xw2, yw1, yw2, tlx, tly;

int xv1,xv2,yv1,yv2;

void cuaso(float x1, float y1, float x2, float

y2)

{

xw1= x1; yw1=y1;

xw2=x2;yw2=y2;

}

void khungnhin(int x1, int y1, int x2, int

y2)

{

xv1= x1; yv1=y1;

xv2=x2;yv2=y2;

tlx=float(xv2-xv1)/(xw2-xw1);

tly=float(yv2-yv1)/(yw2-yw1);

}

void chuyenden(float x, float y)

{

int xm=(int)(tlx*(x-xw1)+xv1);

int ym=(int)(tly*(yw2-y)+yv1);

moveto(xm,ym);

}

void veden(float x, float y)

{

int xm=(int)(tlx*(x-xw1)+xv1);

int ym=(int)(tly*(yw2-y)+yv1);

lineto(xm,ym);

}

main() { int mh=0;

int mode;

float pi=3.14;

initwindow(640,480);

cuaso(-pi,-1,2*pi,1); // tao cua so hien thi anh thuc

khungnhin(200,200,400,300); // khung nhin tren man hinh

line(0,250,640,250);

line(333,0,333,480);

outtextxy(330,247,"0");

float dx=0.01; // buoc nhay float x=xw1;

float y=cos(x);

chuyenden(x,y);

setcolor(1);

while(x<xw2) {

x+=dx;

y=cos(x);

veden(x,y);

} getch();

}

Ngày đăng: 29/07/2019, 17:06

TỪ KHÓA LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w