C++实现画图功能的程序 急啊!!!!!!!!!!!!!!

C++实现画图功能的程序 急啊!!!!!!!!!!!!!!,第1张

这个是画圆的。

#include <mathh>

#include <graphicsh> /预定义库函数/

void circlePoint(int x,int y) /八分法画圆程序/

{

circle(320 x20,240 y20,3);

circle(320 y20,240 x20,3);

circle(320-y20,240 x20,3);

circle(320-x20,240 y20,3);

circle(320-x20,240 y20,3);

circle(320-x20,240-y20,3);

circle(320-y20,240-x20,3);

circle(320 y20,240-x20,3);

circle(320 x20,240-y20,3);

}

void MidBresenhamcircle(int r) / 中点Bresenham算法画圆的程序 /

{

int x,y,d;

x=0;y=r;d=1-r; / 计算初始值 /

while(x<y)

{ circlePoint(x,y); / 绘制点(x,y)及其在八分圆中的另外7个对称点 /

if(d<0) d =2x 3; / 根据误差项d的判断,决定非最大位移方向上是走还是不走 /

else

{ d =2(x-y) 5;

y--;

}

x ;

delay(900000);

} / while /

}

main()

{

int i,j,r,graphmode,graphdriver;

detectgraph(&graphdriver,&graphmode);

initgraph(&graphdriver,&graphmode," ");

printf("中点Bresenhamcircle算法画圆的程序\n"); /提示信息/

printf("注意 |r|<=11");

printf("\n输入半径值 r:");

scanf("%d",&r);

printf("按任意键显示图形");

getch();

cleardevice();

setbkcolor(BLACK);

for(i=20;i<=620;i =20) /使用双循环画点函数画出表格中的纵坐标/

for(j=20;j<=460;j )

putpixel(i,j,2);

for(j=20;j<=460;j =20) /使用双循环画点函数画出表格中的横坐标/

for(i=20;i<=620;i )

putpixel(i,j,2);

outtextxy(320,245,"0"); /原点坐标/

outtextxy(320-520,245,"-5");circle(320-520,240,2); /横坐标值/

outtextxy(320 520,245,"5");circle(320 520,240,2);

outtextxy(320-1020,245,"-10");circle(320-1020,240,2);

outtextxy(320 1020,245,"10");circle(320 1020,240,2);

outtextxy(320-1520,245,"-15");circle(320-1520,240,2);

outtextxy(320 1520,245,"15");circle(320 1520,240,2);

outtextxy(320,240-520,"-5");circle(320,240-520,2); /纵坐标值/

outtextxy(320,240 520,"5");circle(320,240 520,2);

outtextxy(320,240-1020,"-10");circle(320,240-1020,2);

outtextxy(320,240 1020,"10");circle(320,240 1020,2);

outtextxy(20,10,"The center of the circle is (0,0) "); /坐标轴左上角显示提示信息/

setcolor(RED); /标记坐标轴/

line(20,240,620,240); outtextxy(320 1520,230,"X");

line(320,20,320,460); outtextxy(330,20,"Y");

setcolor(YELLOW);

MidBresenhamcircle(r);

setcolor(BLUE); /绘制圆/

circle(320,240,r20);

setcolor(2);

getch();

closegraph();

}

下面这个是画直线的。

#include<graphicsh>

#include<mathh>

/

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

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

格 式: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=-1iTx+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=05; /f=05/

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>0fDy/fDx:(-fDy/fDx); /F=|dy/dx|/

if(fDx<0)iTx=-1;

if(fDy<0)iTy=-1;

fS=fDx>0fDx:(-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>0fDy:(-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>0fDy:(-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--;

}

}

}

}

不懂的可以继续探讨。谢谢

#include <reg51H>

#define uint unsigned int

#define uchar unsigned char

#define Alarm_Value 30 //温度报警值

sbit rs = P2^0;

sbit lcdcs = P2^2;

sbit buzzer = P3^4; //蜂鸣器报警

sbit OUT = P3^5; //光的检测

sbit DQ = P3^7; //温度传送数据IO口

uchar TempBuffer[8];

uint temp_value; //温度值

light_flag=1; //标志位

uchar value1[]=;

uchar value2[]=;

uchar value3[]=;

uchar value4[]=;

/ds18b20子程序/

/ds18b20延迟子函数(晶振12MHz )/

void delay_18B20(unsigned int i)

{

while(i--);

}

/ds18b20初始化函数/

void Init_DS18B20(void)

{

unsigned char x=0;

DQ = 1;

delay_18B20(8);

DQ = 0;

delay_18B20(80);

DQ = 1;

delay_18B20(14);

x=DQ;

delay_18B20(20);

}

/ds18b20读一个字节/

unsigned char ReadOneChar(void)

{

uchar i=0;

uchar dat = 0;

for (i=8;i>0;i--)

{

DQ = 0; // 给脉冲信号

dat>>=1;

DQ = 1; // 给脉冲信号

if(DQ)

dat|=0x80; //先读入低字节

delay_18B20(4);

}

return(dat);

}

/ds18b20写一个字节/

void WriteOneChar(uchar dat)

{

unsigned char i=0;

for (i=8; i>0; i--)

{

DQ = 0;

DQ = dat&0x01;

delay_18B20(5);

DQ = 1;

dat>>=1;

}

}

/读取ds18b20当前温度/

void ReadTemp(void)

{

unsigned char a=0;

unsigned char b=0;

unsigned char t=0;

float tt;

Init_DS18B20();

WriteOneChar(0xCC); //Skip ROM command

WriteOneChar(0x44); //启动DS18B20进行温度转换

delay_18B20(100);

Init_DS18B20();

WriteOneChar(0xCC); //Skip ROM command

WriteOneChar(0xBE); // 读暂存器9个字节内容

delay_18B20(100);

a=ReadOneChar(); //读温度值低位

b=ReadOneChar(); //读温度值高位

temp_value=b;

temp_value<<=8;

temp_value=temp_value|a;

tt=temp_value00625;

temp_value=tt100+05; /经典:处理保留几位小数(此列为2位);/

}

/温度值转换为字符串/

void temp_to_str()

{

TempBuffer[0]=temp_value/1000+'0'; //十位

TempBuffer[1]=temp_value%1000/100+'0'; //个位

TempBuffer[2]=''; //小数点

TempBuffer[3]=temp_value%1000%100/10+'0'; //小数点后一位

TempBuffer[4]=temp_value%1000%100%10+'0'; //小数点后二位

TempBuffer[5]=0xdf; //温度符号

TempBuffer[6]='C';

TempBuffer[7]='\0';

}

void delay(uint ms)

{

uint i,j;

for (j=0;j<ms;j++)

for (i=0;i<120;i++);

}

Check_light()

{

if(out==0)

{

light_flag=1;

}

else

{

light_flag=0;

}

}

/1602显示开始 /

void write_command(uchar command)

{

rs=0;

P0=command;

lcdcs=1;

lcdcs=0;

}

void write_data(uchar data0)

{

rs=1;

P0=data0;

lcdcs=1;

lcdcs=0;

}

void init_1602()

{

delay(15);

write_command(0x38);

delay(5);

write_command(0x0c);

delay(5);

write_command(0x06);

delay(5);

}

/1602显示结束

void show()

{

uchar i;

init_1602(); //初始化lcd

write_command(0x80); //液晶显示位置第一行第一个

Init_DS18B20();

ReadTemp();

temp_to_str();

for (i=0;i<sizeof(value1)-1;i++)

{

write_data(value1[i]);

delay(5);

}

for (i=0;i<sizeof(TempBuffer)-1;i++)

{

write_data(TempBuffer[i]);

delay(5);

}

write_command(0x80+0x40); //液晶显示位置 第二行第一个

delay(100);

for (i=0;i<sizeof(value2)-1;i++)

{

write_data(value2[i]);

delay(5);

}

if(light_flag== 1 )

{

for(i=0;i<sizeof(value3)-1;i++)

{

write_data(value3[i]);

delay(5);

}

}

else

{

for(i=0;i<sizeof(value4)-1;i++)

{

write_data(value4[i]);

delay(5);

}

}

}

void Temperature_Alarm() //温度报警

{

if(temp_value/100>=Alarm_Value) //取temp_value前两位

{

buzzer = 0; //不要用端口赋值

}

else

{

buzzer = 1;

}

}

/主函数/

void main()

{

while(1)

{

show();

Temperature_Alarm();

Check_light();

}

}

我做的液晶是1602的

方法一:开始--设置--控制面板--添加或删除程序--添加/删除windows组件--附件和工具--详细信息--附件--详细信息--在画图前面打上对号--确定。如果没有就按照下面的方法。

方法二:在C:\WINDOWS\system32下找到mspaint这个文件就是。如果没有就到别的电脑中复制一个粘贴上就可以。

要想在开始菜单中显示出来,再使用方法一就可以了。

这有什么难的,4个编辑框 3个按钮 1个标签不就做出来了?

按照自己的想法去写密匙加密的方式,

只要有一个方式就可以通过转换来进行加密解密

易语言的加密数据()

这个命令可以帮你达到如上的功能,

还有解密数据()

画图程序可以实现。

不同的画图程序可能有不同的功能和 *** 作方式,但通常都能够提供基本的绘制工具和选项。

除了自带的“画图”程序外,还有许多专业绘图软件可供选择,如Adobe Illustrator, CorelDRAW, SketchUp等。这些软件功能更加强大,支持更多高级特性和效果,并且适合于专业设计人员使用。

x=1:0001:2;

y1=exp(x)09;

y2=-log(x)5+5;

plot(x,y1,x,y2,x,y1+y2)

这个可以产生类似的曲线

以上就是关于C++实现画图功能的程序 急啊!!!!!!!!!!!!!!全部的内容,包括:C++实现画图功能的程序 急啊!!!!!!!!!!!!!!、用C语言写出基于单片机的数字温度计程序,要求能下图仿真能运行,如图有问题,则请另附图,谢谢、pb怎样实现windows附件的画图版程序 0等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址: http://outofmemory.cn/zz/9641058.html

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

发表评论

登录后才能评论

评论列表(0条)

保存