320x240 彩色LCD營幕的八角窗形-L 的幾何圖形範例#30
第12個八角窗形- L 的幾何圖形範例,本次的範例是所有八角窗形繪製中最為困難的一個,因為太多45度的斜線所致,另外是在SIN與COS計算時,也有些許誤差發生,所以在有些數值部份不得不做一些加減調校,至於相互之間是否有相關的公式可找出來,那就看看同好是否願意去挑戰一下了。
n=12;r=51;w1=4;
for(i=1;i<5;i++)
{ GS[i][0]=120+(cos(((i-1)*90)*PI/180)*(r*2));
GS[i][1]=180+(sin(((i-1)*90)*PI/180)*(r*2));
}
GS[5][0]=GS[1][0];GS[5][1]=GS[1][1]+n;
GS[6][0]=GS[2][0]+n;GS[6][1]=GS[2][1];
GS[7][0]=GS[2][0]-n;GS[7][1]=GS[2][1];
GS[8][0]=GS[3][0];GS[8][1]=GS[3][1]+n;
GS[9][0]=GS[3][0];GS[9][1]=GS[3][1]-n;
GS[10][0]=GS[4][0]-n;GS[10][1]=GS[4][1];
GS[11][0]=GS[4][0]+n;GS[11][1]=GS[4][1];
GS[12][0]=GS[1][0];GS[12][1]=GS[1][1]-n;
//
for(j=1;j<5;j++)
{ n=(j-1)*4; //4個菱形
for(i=1;i<5;i++)
{ GS[i+n][0]=120+(cos((i*90)*PI/180)*(24*j));
GS[i+n][1]=180+(sin((i*90)*PI/180)*(24*j));
}
if(j>=3) goto A0;
Line(GS[1+n][0],GS[1+n][1],GS[2+n][0],GS[2+n][1],YCOLOR[z1]);
Line(GS[2+n][0],GS[2+n][1],GS[3+n][0],GS[3+n][1],YCOLOR[z1]);
Line(GS[3+n][0],GS[3+n][1],GS[4+n][0],GS[4+n][1],YCOLOR[z1]);
Line(GS[4+n][0],GS[4+n][1],GS[1+n][0],GS[1+n][1],YCOLOR[z1]);
A0:
_nop_();
}
Line(GS[1][0],GS[1][1],GS[5][0],GS[5][1],YCOLOR[z1]);
Line(GS[2][0],GS[2][1],GS[6][0],GS[6][1],YCOLOR[z1]);
Line(GS[3][0],GS[3][1],GS[7][0],GS[7][1],YCOLOR[z1]);
Line(GS[4][0],GS[4][1],GS[8][0],GS[8][1],YCOLOR[z1]);
v=35;
// 右下象限
Line(GS[9][0],GS[9][1],GS[13][0],GS[13][1],YCOLOR[z1]);
x0=120+cos(30*PI/180)*v; y0=180+sin(30*PI/180)*v;
x1=120+cos(60*PI/180)*v; y1=180+sin(60*PI/180)*v;
GS[17][0]=x0+cos(45*PI/180)*(v); GS[17][1]=y0+sin(45*PI/180)*(v);
GS[18][0]=x1+cos(45*PI/180)*(v); GS[18][1]=y1+sin(45*PI/180)*(v);
Line(x0,y0,GS[17][0],GS[17][1],YCOLOR[z1]);
Line(x1,y1,GS[18][0],GS[18][1],YCOLOR[z1]);
Line(GS[17][0],GS[17][1],GS[16][0],GS[16][1],YCOLOR[z1]);
Line(GS[18][0],GS[18][1],GS[13][0],GS[13][1],YCOLOR[z1]);
Line(GS[17][0],GS[17][1],GS[17][0],GS[18][1],YCOLOR[z1]);
Line(GS[18][0],GS[18][1],GS[17][0],GS[18][1],YCOLOR[z1]);
x2=GS[17][0]+cos(45*PI/180)*(12); y2=GS[18][1]+sin(45*PI/180)*(12);
Line(GS[17][0],GS[18][1],x2,y2,YCOLOR[z1]);
Line(x2,y2,GS[16][0],GS[16][1]+28,YCOLOR[z1]);
Line(x2,y2,GS[13][0]+28,GS[13][1],YCOLOR[z1]);
Line(GS[17][0]-12,GS[17][1]-12,GS[12][0],GS[12][1],YCOLOR[z1]);
Line(GS[18][0]-12,GS[18][1]-12,GS[9][0],GS[9][1],YCOLOR[z1]);
Line(GS[16][0],GS[16][1]+28,GS[16][0],GS[16][1],YCOLOR[z1]);
Line(GS[13][0]+28,GS[13][1],GS[13][0],GS[13][1],YCOLOR[z1]);
Line(GS[17][0],GS[17][1]-24,GS[17][0],GS[17][1]-42,YCOLOR[z1]);
Line(GS[18][0]-24,GS[18][1],GS[18][0]-42,GS[18][1],YCOLOR[z1]);
Line(GS[17][0]+15,GS[17][1]-15,GS[17][0]+28,GS[17][1]-2,YCOLOR[z1]);
Line(GS[18][0]-15,GS[18][1]+15,GS[18][0]-2,GS[18][1]+28,YCOLOR[z1]);
//左下象限
Line(GS[10][0],GS[10][1],GS[14][0],GS[14][1],YCOLOR[z1]);
x0=120+cos(120*PI/180)*v; y0=180+sin(120*PI/180)*v;
x1=120+cos(150*PI/180)*v; y1=180+sin(150*PI/180)*v;
GS[17][0]=x0+cos(135*PI/180)*(v); GS[17][1]=y0+sin(135*PI/180)*(v);
GS[18][0]=x1+cos(135*PI/180)*(v); GS[18][1]=y1+sin(135*PI/180)*(v);
Line(x0,y0,GS[17][0], GS[17][1],YCOLOR[z1]);
Line(x1,y1,GS[18][0],GS[18][1],YCOLOR[z1]);
Line(GS[17][0],GS[17][1],GS[13][0],GS[13][1],YCOLOR[z1]);
Line(GS[18][0],GS[18][1],GS[14][0],GS[14][1],YCOLOR[z1]);
Line(GS[17][0],GS[17][1],GS[18][0],GS[17][1],YCOLOR[z1]);
Line(GS[18][0],GS[18][1],GS[18][0],GS[17][1],YCOLOR[z1]);
x2=GS[18][0]+cos(135*PI/180)*(12); y2=GS[17][1]+sin(135*PI/180)*(12);
Line(GS[18][0],GS[17][1],x2,y2,YCOLOR[z1]);
Line(x2,y2,GS[14][0],GS[14][1]+30,YCOLOR[z1]);
Line(x2,y2,GS[13][0]-30,GS[13][1],YCOLOR[z1]);
Line(GS[18][0]+12,GS[18][1]-12,GS[10][0],GS[10][1],YCOLOR[z1]);
Line(GS[17][0]+12,GS[17][1]-12,GS[9][0],GS[9][1],YCOLOR[z1]);
Line(GS[14][0],GS[14][1]+28,GS[14][0],GS[14][1],YCOLOR[z1]);
Line(GS[13][0]-28,GS[13][1],GS[13][0],GS[13][1],YCOLOR[z1]);
Line(GS[18][0],GS[18][1]-24,GS[18][0],GS[18][1]-42,YCOLOR[z1]);
Line(GS[17][0]+24,GS[17][1],GS[17][0]+42,GS[17][1],YCOLOR[z1]);
Line(GS[18][0]-15,GS[18][1]-15,GS[18][0]-28,GS[18][1]-2,YCOLOR[z1]);
Line(GS[17][0]+15,GS[17][1]+15,GS[17][0]+2,GS[17][1]+28,YCOLOR[z1]);
//左上象限
Line(GS[11][0],GS[11][1],GS[15][0],GS[15][1],YCOLOR[z1]);
x0=120+cos(210*PI/180)*34; y0=180+sin(210*PI/180)*34;
x1=120+cos(240*PI/180)*34; y1=180+sin(240*PI/180)*34;
GS[17][0]=x0+cos(225*PI/180)*34; GS[17][1]=y0+sin(225*PI/180)*34;
GS[18][0]=x1+cos(225*PI/180)*34; GS[18][1]=y1+sin(225*PI/180)*34;
Line(x0,y0,GS[17][0],GS[17][1],YCOLOR[z1]);
Line(x1,y1,GS[18][0],GS[18][1],YCOLOR[z1]);
Line(GS[17][0],GS[17][1],GS[14][0],GS[14][1],YCOLOR[z1]);
Line(GS[18][0],GS[18][1],GS[15][0],GS[15][1],YCOLOR[z1]);
Line(GS[17][0],GS[17][1],GS[17][0],GS[18][1],YCOLOR[z1]);
Line(GS[18][0],GS[18][1],GS[17][0],GS[18][1],YCOLOR[z1]);
x2=GS[17][0]+cos(225*PI/180)*(12); y2=GS[18][1]+sin(225*PI/180)*(12);
Line(GS[17][0],GS[18][1],x2,y2,YCOLOR[z1]);
Line(x2,y2,GS[14][0],GS[14][1]-31,YCOLOR[z1]);
Line(x2,y2,GS[15][0]-31,GS[15][1],YCOLOR[z1]);
Line(GS[17][0]+12,GS[17][1]+12,GS[10][0],GS[10][1],YCOLOR[z1]);
Line(GS[18][0]+12,GS[18][1]+12,GS[11][0],GS[11][1],YCOLOR[z1]);
Line(GS[14][0],GS[14][1]-29,GS[14][0],GS[14][1],YCOLOR[z1]);
Line(GS[15][0]-29,GS[15][1],GS[15][0],GS[15][1],YCOLOR[z1]);
Line(GS[17][0]-1,GS[17][1]+25,GS[17][0],GS[17][1]+42,YCOLOR[z1]);
Line(GS[18][0]+25,GS[18][1]-1,GS[18][0]+42,GS[18][1],YCOLOR[z1]);
Line(GS[17][0]-15,GS[17][1]+15,GS[17][0]-30,GS[17][1],YCOLOR[z1]);
Line(GS[18][0]+15,GS[18][1]-15,GS[18][0],GS[18][1]-30,YCOLOR[z1]);
//右上象限
Line(GS[12][0],GS[12][1],GS[16][0],GS[16][1],YCOLOR[z1]);
x0=120+cos(300*PI/180)*v; y0=180+sin(300*PI/180)*v;
x1=120+cos(330*PI/180)*v; y1=180+sin(330*PI/180)*v;
GS[17][0]=x0+cos(315*PI/180)*v; GS[17][1]=y0+sin(315*PI/180)*v;
GS[18][0]=x1+cos(315*PI/180)*v; GS[18][1]=y1+sin(315*PI/180)*v;
Line(x0,y0,GS[17][0],GS[17][1],YCOLOR[z1]);
Line(x1,y1,GS[18][0],GS[18][1],YCOLOR[z1]);
Line(GS[17][0],GS[17][1],GS[15][0],GS[15][1],YCOLOR[z1]);
Line(GS[18][0],GS[18][1],GS[16][0],GS[16][1],YCOLOR[z1]);
Line(GS[17][0],GS[17][1],GS[18][0],GS[17][1],YCOLOR[z1]);
Line(GS[18][0],GS[18][1],GS[18][0],GS[17][1],YCOLOR[z1]);
x2=GS[18][0]+cos(315*PI/180)*(12); y2=GS[17][1]+sin(315*PI/180)*(12);
Line(GS[18][0],GS[17][1],x2,y2,YCOLOR[z1]);
Line(x2,y2,GS[15][0]+30,GS[15][1],YCOLOR[z1]);
Line(x2,y2,GS[16][0],GS[16][1]-30,YCOLOR[z1]);
Line(GS[18][0]-12,GS[18][1]+12,GS[12][0],GS[12][1],YCOLOR[z1]);
Line(GS[17][0]-12,GS[17][1]+12,GS[11][0],GS[11][1],YCOLOR[z1]);
Line(GS[16][0],GS[16][1]-28,GS[16][0],GS[16][1],YCOLOR[z1]);
Line(GS[15][0]+28,GS[15][1],GS[15][0],GS[15][1],YCOLOR[z1]);
Line(GS[18][0],GS[18][1]+25,GS[18][0],GS[18][1]+42,YCOLOR[z1]);
Line(GS[17][0]-24,GS[17][1],GS[17][0]-42,GS[17][1],YCOLOR[z1]);
Line(GS[17][0]-15,GS[17][1]-15,GS[17][0],GS[17][1]-30,YCOLOR[z1]);
Line(GS[18][0]+15,GS[18][1]+15,GS[18][0]+30,GS[18][1],YCOLOR[z1]);