http://www.kmvs.km.edu.tw/lf/gallery/70/segxGreen.jpg

//g++ `Magick++-config --cxxflags --cppflags` -I/usr/local/include/ImageMagick-7 segx.c `Magick++-config --ldflags --libs` -L/usr/local/zlib/lib -lz #include <stdio.h> #include <string.h> #include <stdlib.h> #include <math.h> #include <Magick++.h> using namespace Magick;
void draw3(int ax,int ay,int bx,int by,int cx,int cy,int dx,int dy,Image *pim){ pim->strokeColor("green"); int px=(ax+bx)/2; int py=(ay+by)/2; pim->draw(DrawableLine(ax,ay,px,py));
int qx=(ax+cx)/2; int qy=(ay+cy)/2; pim->draw(DrawableLine(px,py,qx,qy));
int rx=(bx+cx)/2; int ry=(by+cy)/2; pim->draw(DrawableLine(qx,qy,rx,ry));
}
void drawA(int L,int ox,int oy,int w,int h,Image *pim) { draw3(ox+w*2/3,oy+h,ox,oy+h,ox,oy+h*1/3,ox+w*2/3,oy+h*1/3,pim); draw3(ox,oy+h*2/3,ox,oy,ox+w*2/3,oy,ox+w*2/3,oy+h*2/3,pim); draw3(ox+w*1/3,oy,ox+w,oy,ox+w,oy+h*2/3,ox+w*1/3,oy+h*2/3,pim); draw3(ox+w,oy+h*1/3,ox+w,oy+h,ox+w*1/3,oy+h,ox+w*1/3,oy+h*1/3,pim);
if (L<1) { drawA(L+1,ox+w/3,oy+h/3,w/3,h/3,pim); drawA(L+1,ox+w/3,oy,w/3,h/3,pim); drawA(L+1,ox,oy+h/3,w/3,h/3,pim); drawA(L+1,ox+w/3,oy+h*2/3,w/3,h/3,pim); drawA(L+1,ox+w*2/3,oy+h/3,w/3,h/3,pim); } }
void drawX(int L,int ox,int oy,int w,int h,Image *pim) { if (L==0) { drawA(0,ox,oy,w,h,pim); return; } int dw,dh; dw=w/2; dh=h/2; drawX(L-1,ox+dw,oy+dh,w/2,h/2,pim); dw=0; dh=0; drawX(L-1,ox+dw,oy+dh,w/2,h/2,pim); dw=w/2; dh=0; drawX(L-1,ox+dw,oy+dh,w/2,h/2,pim); dw=0; dh=h/2; drawX(L-1,ox+dw,oy+dh,w/2,h/2,pim); }
int main() { int w=2048/35; int h=1536/35; Image im( Geometry(w*35, h*35), Color("black")); im.draw(DrawableStrokeColor(Color("black"))); im.strokeWidth(2); drawX(4,0,0,35*w,35*h,&im); char st[60]; sprintf(st,"w=%d h=%d",w,h); im.font("/usr/share/fonts/truetype/arphic/uming.ttc"); im.fontPointsize(32); im.draw(DrawableText(32, 32, st)); im.write("segx.jpg"); } |