C语言画图源程序

C语言画图源程序,第1张

不是仿庆非常理想,但马马虎虎吧。

#include <graphics.h>

#include <stdlib.h>

#include <搏余stdio.h>

#include <conio.h>

#include <time.h>

int main(void)

{

int i,j

int gdriver = DETECT, gmode, errorcode

int maxx, maxy,maxc

int xc,yc,rc,cc /*circle*/

int xr,yr,wr,hr,cr/*rectangle*/

int xt,yt,st,ct/*text*/

char *c

int dx=50,dy=40

initgraph(&gdriver, &gmode, "")

errorcode = graphresult()

if (errorcode != grOk)

{

printf("Graphics error: %s\n", grapherrormsg(errorcode))

printf("Press any key to halt:")

getch()

exit(1)

}

randomize()

maxx = getmaxx()

maxy = getmaxy()

maxc = getmaxcolor()

setcolor(maxc)

while(!kbhit())

{

cleardevice()

xc=dx+(maxx-2*dx-10)*1.0*rand()/RAND_MAX

yc=dy+(maxy-2*dy-10)*1.0*rand()/RAND_MAX

rc=dy*1.0*rand()/RAND_MAX

cc=(maxc-1)*1.0*rand()/RAND_MAX

setcolor(cc)

circle(xc,yc,rc)

setfillstyle(SOLID_FILL,cc)

floodfill(xc,yc,cc)

xr=dx+(maxx-2*dx-10)*1.0*rand()/RAND_MAX

yr=dy+(maxy-2*dy-10)*1.0*rand()/RAND_MAX

wr=dx*1.0*rand()/RAND_MAX

hr=dy*1.0*rand()/RAND_MAX

cr=(maxc-1)*1.0*rand()/RAND_MAX

setcolor(cr)

rectangle(xr-wr/2,yr-hr/2,xr+wr/2,yr+hr/2)

setfillstyle(SOLID_FILL,cr)

floodfill(xr,yr,cr)

xt=dx+(maxx-2*dx-10)*1.0*rand()/RAND_MAX

yt=dy+(maxy-2*dy-10)*1.0*rand()/RAND_MAX

st=dy*1.0*rand()/RAND_MAX

ct=(maxc-1)*1.0*rand()/基大滚RAND_MAX

c[0]='A'+26.0*rand()/RAND_MAX

c[1]='\0'

setcolor(ct)

settextjustify(LEFT_TEXT, TOP_TEXT)

settextstyle(DEFAULT_FONT,HORIZ_DIR,st)

outtextxy(xt,yt,c)

sleep(1)

}

getch()

closegraph()

return 0

}

换账号再来回答,veket的小号。。。

.......用了ege图形库.........纯体力活.........

源代码....demo.cpp.....

/////////////////////////////////////////

//        ege 0.3.8   

//        MinGW  g++ 3.4.2

//        veket的小号

/////////////////////////////////////////

#include "graphics.h"

#include <stdio.h>

const int YLEN = 50

const int XLEN = 40

const int WIDTH = 10*XLEN

const int HEIGHT = 2*YLEN

const int 桐或XWIDTH = 640

const int YHEIGHT = 480

int main()

{

  int x1, y1, x2, y2, x, y

  char strbuf[100]

  int i

  setinitmode(0)

  initgraph(XWIDTH, YHEIGHT)

  setbkcolor(RGB(0xcc, 0xcc, 0xcc))

  setfillstyle(RGB(0xff, 0xff, 0xff))

  x2 = x1 = (getmaxx()-WIDTH)/2

  y1 = (getmaxy()-2*HEIGHT-YLEN)/2

  y2 = y1 + HEIGHT + YLEN

  bar(x1, y1, x1+WIDTH, y1+2*YLEN)

  setcolor(RGB(0x04, 0x04, 0x04))

  rectangle(x1, y1, x1+WIDTH, y1+2*YLEN)

  outtextxy(x1-20, y1-10, "1")

  outtextxy(x1-20, y1-10+YLEN, "0")

  outtextxy(x1-20, y1-10+2*YLEN, "-1")

  for(x=x1,y=y1+2*YLEN+10,i=0x<=x1+WIDTHx+=2*XLEN,i+=2)

  {

      sprintf(strbuf, "%d\0", i)

      outtextxy(x, y, strbuf)

  }

  for(x=x1x<x1+(int)(3*PI*XLEN)x++)

  {

      y = y1 + YLEN - (int)(YLEN*sin(1.0*(x-x1)/XLEN) + 0.5)

      putpixel(x, y, RGB(0x3e, 0x3e, 0xff))

  }

 局梁伍渣尺

  bar(x2, y2, x2+WIDTH, y2+2*YLEN)

  rectangle(x2, y2, x2+WIDTH, y2+2*YLEN)

  outtextxy(x2-20, y2-10, "1")

  outtextxy(x2-20, y2-10+YLEN, "0.5")

  outtextxy(x2-20, y2-10+2*YLEN, "0")

  for(x=x2,y=y2+2*YLEN+10,i=0x<=x1+WIDTHx+=2*XLEN,i+=2)

  {

      sprintf(strbuf, "%d\0", i)

      outtextxy(x, y, strbuf)

  }

  for(x=x2x<x2+(int)(PI*XLEN)x++)

  {

      y = y2 + 2*YLEN - (int)(2*YLEN*sin(1.0*(x-x1)/XLEN) + 0.5)

      putpixel(x, y, RGB(0x3e, 0x3e, 0xff))

  }

  for(x=x2+(int)(2*PI*XLEN)x<x2+(int)(3*PI*XLEN)x++)

  {

      y = y2 + 2*YLEN - (int)(2*YLEN*sin(1.0*(x-x1)/XLEN) + 0.5)

      putpixel(x, y, RGB(0x3e, 0x3e, 0xff))

  }

  getch()

  closegraph()

  return 0

}

C语言的话画直线用MoveTo()和LineTo()很简单啊。

帮你复制一份我学习时老师给的画线两例:

#include<graphics.h>

#include<math.h>

/*

###############################################################################

功 能:本函数的作用是用逐点比较法来画一条直线

格 式:void myline1(int x1,int y1,int x2,int y2,int color)

参数说明:x1,y1是起始点坐标,x2,y2是终止点,color是画线的颜色

调用示例:myline1(10,20,500,440,4)

###############################################################################

*/

void myline1(int x1,int y1,int x2,int y2,int color)

{

/*变量定义开始(2007/10/16增加)*/

int iTx/*x轴终点的相对坐标xa或临时变量*/

int iTy/*y轴终点的相对坐标ya或临时变量*/

int iDx/*x轴方向步长dx*/

int iDy/*y轴方向的步长dy*/

int iFt/*偏差Fm*/

int iSt/*记数循环数(dx+dy)S*/

int iXt/*x方向循环变量xm*/

int iYt/*y方向循环变量ym*/

/*变量定义结束*/

/*变量初始化开始*/

/*如果是第三象限或第四象限则换成第一或第二象限*/

if(y2<y1)

{

iTx=x1

x1=x2

x2=iTx

iTy=y1

y1=y2

y2=iTy

}

iTx=x2-x1/*取x轴的相对坐标*/

iTy=y2-y1/粗李*取y轴的相对坐标*/

iDx=1

iDy=1

iFt=0

iSt=iTx+iTy

if(iTx<0)iSt=-1*iTx+iTy/*如果在第二象限,则x轴方向步长取负值*/

iXt=0

iYt=0

/*变量初始化结束*/

/*数据处理开始*/

while(iSt>0)

{

putpixel(x1+iXt,y1+iYt,color)

if(iTx>=0) /*如果在第一象限*/

{

if(iFt<0) /*如果偏差小于0*/

{

iYt+=iDy/*y方向走一步*/

iFt+=iTx

}

else /睁辩*如果偏差大于或等于0*/

{

iXt+=iDx/*x方向走一步*/

iFt-=iTy

}

}

else

{

if(iFt<0) /*如果偏差小于0*/

{

iXt-=iDx/*负x方向走一步*/

iFt+=iTy

}

else /*如果偏差大于或等于0*/

{

iYt+=iDy/*y方向走一步*/

iFt+=iTx

}

}

iSt--

}

}

/*

###############################################################################

功 能:本函数的悉凳缺作用是用来画一条直线

格 式:void myline2(int x1,int y1,int x2,int y2,int color)

参数说明:x1,y1是起始点坐标,x2,y2是终止点,color是画线的颜色

调用示例:myline2(10,20,500,440,4)

###############################################################################

*/

int myline2(int x1,int y1,int x2,int y2,int color)

{

int iX/*x方向的坐标变量*/

int iY/*y方向的坐标变量*/

int iTx/*x方向的步长变量*/

int iTy/*y方向的步长变量*/

float fDx/*x方向的差分变量*/

float fDy/*y方向的差分变量*/

float fMinf/*算法中的f*/

float fMaxF/*算法中的F*/

float fS/*终点判断变量*/

fMinf=0.5/*f=0.5*/

iX=x1

iY=y1

putpixel(x1,y1,color)

if(x1==x2&&y1==y2) /*如果终点和起始点相同*/

{

return(1)

}

iTx=1

iTy=1

fDx=(float)(x2-x1)

fDy=(float)(y2-y1)

fMaxF=fDy/fDx>0?fDy/fDx:(-fDy/fDx)/*F=|dy/dx|*/

if(fDx<0)iTx=-1

if(fDy<0)iTy=-1

fS=fDx>0?fDx:(-fDx)

if(fMaxF==1) /*如果F=1*/

{

iX=x1

iY=y1

while(fS>0)

{

iX+=iTx/*x方向走一步*/

iY+=iTy/*y方向走一步*/

putpixel(iX,iY,color)

fS--

}

}

else if(fMaxF>1) /*如果F>1*/

{

fS+=fDy>0?fDy:(-fDy)

while(fS>0)

{

iY+=iTy/*y方向走一步*/

putpixel(iX,iY,color)

fMinf+=1/fMaxF/*f=f+1/F*/

fS--

if(fMinf>=1) /*如果f>=1*/

{

iX+=iTx/*x方向走一步*/

fMinf--/*f=f-1*/

putpixel(iX,iY,color)

fS--

}

}

}

else /*如果F<1*/

{

fS+=fDy>0?fDy:(-fDy)

while(fS>0)

{

iX+=iTx/*x方向走一步*/

putpixel(iX,iY,color)

fMinf+=fMaxF/*f=f+F*/

fS--

if(fMinf>=1) /*如果f>=1*/

{

iY+=iTy/*y方向走一步*/

fMinf--/*f=f-1*/

putpixel(iX,iY,color)

fS--

}

}

}

}


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/12359534.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存