利用c++画基本图形
plot_circle_points(xc,yc,x,y,c); if(p<0)
p=p+4*x+6; else{
p=p+4*(x-y)+10; y--; } x+=1; } if(x==y) plot_circle_points(xc,yc,x,y,c); }
void plot_circle_points(int xc,int yc,int x,int y,int c) {
putpixel(x,y,c); while(y<y2) {
y++; if(p<0)
p+=const1; else{
x+=inc; p+=const2; } putpixel(x,y,c); } } }
void main() {
initgraph(640,480); line(50,50,100,110,152); getchar(); closegraph(); } 圆的 Bresemer 算法; #include<graphics.h> #include<stdio.h> void plot_circle_points(int xc,int yc,int x,int y,int c); void _circle(int xc,int yc,int radius,int c) { int x; int y; int p; x=0; y=radius; p=3-2*radius; while(x<y){ plot_circle_points(xc,yc,x,y,c); if(p<0)
dda 直线算法: #include <easyX.h> #include <graphics.h> #include <conio.h> void DDALine(int xa,int ya,int xb,int yb,int c); void main() {
initgraph(640, 480); DDALine(50,50,180,180,250); getch(); closegraph(); } void DDALine(int xa,int ya,int xb,int yb,int c) { float delta_x, delta_y, x, y; int dx, dy, steps, k,m; dx=xb-xa; dy=yb-ya; m=dy/dx;
DDALine(a+70,b-180,a+100,b-100,RGB(15,58,136)); DDALine(a+100,b-100,a+20,a-20,RGB(15,58,136)); DDALine(a-20,b-20,a-70,b-180,RGB(125,68,146)); DDALine(a-70,b-180,a-100,b-100,RGB(125,68,146)); DDALine(a-100,b-100,a-20,a-20,RGB(125,68,146));} else if(n==3) {initgraph(1000,1000); DDALine(a,0,a,1000,RGB(81,1,1)); DDALine(0,b,1000,b,RGB(81,1,1)); DDALine(a+20,b-20,a+70,b-180,RGB(15,58,136)); DDALine(a+70,b-180,a+100,b-100,RGB(15,58,136)); DDALine(a+100,b-100,a+20,a-20,RGB(15,58,136)); DDALine(a+20,b-20,a+70,b-180,RGB(125,68,146)); DDALine(a+70,b-180,a+100,b-100,RGB(125,68,146)); DDALine(a+100,b-100,a+20,a-20,RGB(125,68,146));} else if(n==4) {initgraph(1000,1000); DDALine(a,0,a,1000,RGB(81,1,1)); DDALine(0,b,1000,b,RGB(81,1,1)); DDALine(a+20,b-20,a+70,b-180,RGB(15,58,136)); DDALine(a+70,b-180,a+100,b-100,RGB(15,58,136)); DDALine(a+100,b-100,a+20,a-20,RGB(15,58,136)); DDALine(a-20,b+20,a-70,b+180,RGB(215,68,146)); DDALine(a-70,b+180,a-100,b+100,RGB(215,68,146)); DDALine(a-100,b+100,a-20,a+20,RGB(215,68,146));} else if(n==5) {printf("输入 x 放大 c 倍"); scanf("%d",&c); printf("输入 y 放大 d 倍"); scanf("%d",&d); initgraph(1000,1000); DDALine(a,0,a,1000,RGB(81,1,1)); DDALine(0,b,1000,b,RGB(81,1,1)); DDALine(a+20,b-20,a+70,b-180,RGB(15,58,136)); DDALine(a+70,b-180,a+100,b-100,RGB(15,58,136)); DDALine(a+100,b-100,a+20,a-20,RGB(15,58,136)); DDALine(a+20*c,b-20*d,a+70*c,b-180*d, RGB(215,68,146)); DDALine(a+70*c,b-180*d,a+100*c,b-100*d, RGB(215,68,146)); DDALine(a+100*c,b-100*d,a+20*c,a-20*d, RGB(215,68,146));} else if(n==6) {printf("输入 y 错切值 c:"); scanf("%d",&c); initgraph(1000,1000); DDALine(a,0,a,1000,RGB(81,1,1));
p=p+4*x+6; else{
p=p+4*(x-y)+10; y--; } x+=1; }
if(x==y) plot_circle_points(xc,yc,x,y,c); }
void plot_circle_points(int xc,int yc,int x,int y,int c) {
putpixel(xc+x,yc+y,c); putpixel(xc-x,yc+y,c); putpixel(xc+x,yc-y,c); putpixel(xc-x,yc-y,c); putpixel(xc+y,yc+x,c); putpixel(xc-y,yc+x,c); putpixel(xc+y,yc-x,c); putpixel(xc-y,yc-x,c); } void main() { initgraph(500,500); _circle(250,250,60,RGB(45,49,48)); _circle(250,250,70,RGB(58,49,48)); _circle(250,250,80,RGB(68,49,48)); _circle(250,250,90,RGB(78,49,48)); _circle(250,250,100,RGB(88,49,48)); getchar(); closegraph(); } 种子填充算法: #include<graphics.h> #include<stdio.h> void seed_filling(int x,int y,int fill_color,int boundary_color); void plot_circle_points(int xc,int yc,int x,int y,int c); void _circle(int xc,int yc,int radius,int c) { int x; int y; int p; x=0; y=radius; p=3-2*radius; while(x<y){
putpixel(xc+x,yc+y,c); putpixel(xc-x,yc+y,c); putpixel(xc+x,yc-y,c); putpixel(xc-x,yc-y,c); putpixel(xc+y,yc+x,c); putpixel(xc-y,yc+x,c); putpixel(xc+y,yc-x,c); putpixel(xc-y,yc-x,c); } void main() { initgraph(500,500); _circle(250,250,60,RGB(45,49,48)); seed_filling(250,250,RGB(27,29,27),RGB(45,16,25)); getchar(); closegraph(); }
void seed_filling(int x,int y,int fill_color,int boundary_color) {
int c; c=getpixel(x,y); if((c<boundary_color)&&(c<fill_color)) {