📄 graph.c
字号:
#include <CsAgb.h>
#define mVRAM (u16 *) 0x06000000
//几何图形庫
void r_draw(u8 xp,u8 yp,u16 color,u8 mod)//描点
{
u32 loc;
xp=xp%240;
yp=yp%160;
loc=240*yp+xp;
if (mod<2) *(mVRAM+loc)=color;
else if(mod==2) *(mVRAM+loc)=*(mVRAM+loc)&color;
else if(mod==3) *(mVRAM+loc)=*(mVRAM+loc)|color;
else if(mod==4) *(mVRAM+loc)=*(mVRAM+loc)^color;
else if(mod==5) *(mVRAM+loc)=~*(mVRAM+loc);
}
void r_dline(u8 xp,u8 yp,u8 len,u16 color,u8 der,u8 mod)//水平与竖直方向上的直线
{
u8 i;
u32 loc;
if (der)
{
for (i=0;i<len;i++)
{
loc=240*((yp+i)%160)+xp;
if (mod<2) *(mVRAM+loc)=color;
else if(mod==2) *(mVRAM+loc)=*(mVRAM+loc)&color;
else if(mod==3) *(mVRAM+loc)=*(mVRAM+loc)|color;
else if(mod==4) *(mVRAM+loc)=*(mVRAM+loc)^color;
else if(mod==5) *(mVRAM+loc)=~*(mVRAM+loc);
}
}
else
{
for (i=0;i<len;i++)
{
loc=yp*240+(xp+i)%240;
if (mod<2) *(mVRAM+loc)=color;
else if(mod==2) *(mVRAM+loc)=*(mVRAM+loc)&color;
else if(mod==3) *(mVRAM+loc)=*(mVRAM+loc)|color;
else if(mod==4) *(mVRAM+loc)=*(mVRAM+loc)^color;
else if(mod==5) *(mVRAM+loc)=~*(mVRAM+loc);
}
}
}
void r_line(u8 xp,u8 yp,u8 xsp,u8 ysp,u16 color,u8 mod)//直线
{
float k;
u8 i=xp;
u8 xd=(xsp>xp?1:-1);
if (xp==xsp)
{
if (ysp<yp) r_dline(xp,ysp,yp-ysp,color,1,mod);
else r_dline(xp,yp,ysp-yp,color,1,mod);
return;
}
if (yp==ysp)
{
if (xsp<xp) r_dline(xsp,yp,xp-xsp,color,0,mod);
else r_dline(xp,yp,xsp-xp,color,0,mod);
return;
}
k=(float)(ysp-yp)/(xsp-xp);
if (abs(k)<1.0)
{
while (i!=xsp)
{
r_draw(i,yp+(i-xp)*k,color,mod);
i+=xd;
}
}
else
{
k=(float)(xsp-xp)/(ysp-yp);
xd=(ysp>yp?1:-1);
i=yp;
while (i!=ysp)
{
r_draw(xp+(i-yp)*k,i,color,mod);
i+=xd;
}
}
}
void r_box(u8 xp,u8 yp,u8 xsp,u8 ysp,u16 color,u8 mod)
//矩形(mod=0矩形框 mod=1 实矩形)
{
u8 i,j;
u8 temp;
u32 loc;
if (xp>239 || xsp>239) return;
if (yp>159 || ysp>159) return;
if (xsp<xp)
{
temp=xp;
xp=xsp;
xsp=temp;
}
if (ysp<yp)
{
temp=yp;
yp=ysp;
ysp=temp;
}
if (mod==0)
{
r_dline(xp,yp,xsp-xp+1,color,0,0);
r_dline(xp,yp,ysp-yp+1,color,1,0);
r_dline(xp,ysp,xsp-xp+1,color,0,0);
r_dline(xsp,yp,ysp-yp+1,color,1,0);
return;
}
for (i=yp;i<=ysp;i++)
for (j=xp;j<=xsp;j++)
{
loc=i*240+j;
if (mod==1) *(mVRAM+loc)=color;
else if(mod==2) *(mVRAM+loc)=*(mVRAM+loc)&color;
else if(mod==3) *(mVRAM+loc)=*(mVRAM+loc)|color;
else if(mod==4) *(mVRAM+loc)=*(mVRAM+loc)^color;
else if(mod==5) *(mVRAM+loc)=~*(mVRAM+loc);
}
}
void r_circle(u8 xp,u8 yp,u8 r,u16 color,u8 mod)
{
u8 i;
if (mod)
{
for (i=1;i<r;i++) CS_Circle(&gScreen,xp,yp,i,color);
}
CS_Circle(&gScreen,xp,yp,r,color);
}
void r_triangle(u8 xp1,u8 yp1,u8 xp2,u8 yp2,u8 xp3,u8 yp3,u16 color,u8 mod)
{
r_line(xp1,yp1,xp2,yp2,color,mod);
r_line(xp2,yp2,xp3,yp3,color,mod);
r_line(xp3,yp3,xp1,yp1,color,mod);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -