您的位置:首页 > 其它

算法生成青天白日满地红旗

2016-07-29 00:00 441 查看
“青天白日满地红”曾经代表中国,特别是在抗日战争的艰苦年代。那时候红军编入国民革命军,戴着青天白日帽徽,全国人民团结在“青天白日满地红”旗帜下,高唱《义勇军进行曲》,奋力抗战,打败了日本帝国主义。“青天白日满地红”象征着中国人的苦难和抗争,跟《义勇军进行曲》一起,鼓舞中国人团结起来取得胜利,凝结着中国人的感情。

青色代表光明纯洁、民族和自由;白色代表坦白无私、民权和平等;白日的十二道光芒,代表著一年十二个月,一天十二个时辰;也象征著国家的命脉,随著时间的前进永存于世界;更鼓舞国人与时俱进,自强不息。青天白日,取象宏美,中华民国为远东大国,日出东方为之最者,且青天白日,示光明正照自由平等之义。

代码如下:

1 class CPixelBlueSkyWhiteSun : public IPixelEquation  2 {  3 public:  4  CPixelBlueSkyWhiteSun()  5  {  6 m_width = 1680;  7 m_height = 1120;  8  9 for (int i = 0; i < 12; i++) 10  { 11 m_list_sin[i] = sinf(i*PI/6); 12 m_list_cos[i] = cosf(i*PI/6); 13  } 14  } 15 16 const char* GetName() const 17  { 18 return "Blue Sky White Sun"; 19  } 20 21 unsigned int CalculatePixel(unsigned int x, unsigned int y); 22 23 private: 24 float m_list_sin[12]; 25 float m_list_cos[12]; 26 };


cpp

1 unsigned int CPixelBlueSkyWhiteSun::CalculatePixel(unsigned int x, unsigned int y)  2 {  3 unsigned int red = 0xffff0000;  4 unsigned int white = 0xffffffff;  5 unsigned int blue = 0xff0000ff;  6  7 float w = m_width*0.5f;  8 float h = m_height*0.5f;  9 10 if ((float)x > w || (float)y > h) 11  { 12 return red; 13  } 14 15 float cX = w*0.5f; 16 float cY = h*0.5f; 17 float radius = cY*0.5f; 18 Vec2 tri0(0.0f, -radius*1.65f); 19 Vec2 tri1(-radius*0.2f, -radius*1.05f); 20 Vec2 tri2(radius*0.2f, -radius*1.05f); 21  Vec2 P; 22 23 float i = x - cX; 24 float j = y - cY; 25 26 float dis = sqrtf(i*i + j*j); 27 28 if (dis < radius) 29  { 30 return white; 31  } 32 else if (dis > radius*1.65f) 33  { 34 return blue; 35  } 36 37 for (int m = 0; m < 12; m++) 38  { 39 P.x = i*m_list_cos[m] - j*m_list_sin[m]; 40 P.y = i*m_list_sin[m] + j*m_list_cos[m]; 41 42 if (IsPointInTriangle(tri0, tri1, tri2, P)) 43  { 44 return white; 45  } 46  } 47 48 return blue; 49 }


基类IPixelEquation的代码见:Why数学图像生成工具

关于结构体Vec2的定义及相关函数见:二维平面上判断点在三角形内的最优算法

代码中没有太考究图形之间的比例,与实际会略有不符。生成图像如下:



相应软件:

Why数学图像生成工具


相关文章:

算法生成五星红旗

算法之美---100幅由程序生成的图像,总有一幅让你感到惊艳[上]

算法之美---100幅由程序生成的图像,总有一幅让你感到惊艳[下]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: