這一篇將提供一套生成五星紅旗的演算法,**中滿滿都是正能量。上一篇文章是生成n芒星,五角星是就芒星的一種,所以不難生成乙個五角星的影象。中華人民共和國國旗是五星紅旗,旗面為紅色,長寬比例為3:2。左上方綴黃色五角星五顆,四顆小星環拱在一顆大星的右面,並各有乙個角尖正對大星的中心點。1、4顆黃星對齊,2、3顆黃星對齊。
**如下: h
複製**
1 class cpixel5starsredflag : public ipixelequation
2 10
11 unsigned int calculatepixel(unsigned int x, unsigned int y);
12 13 struct star
14 ;
20 bool ispointinstar(float x, float y, star& star);
21 22 private:
23 float m_list_sin[5];
24 float m_list_cos[5];
25 26 star m_list_stars[5];
27 };
複製**
頭文章中定義了乙個結構體star,用於決定五角星的位置,大小,旋轉角度。需要為每一顆星設定其合適的數值,我提供的**所用引數是我多次試出來的,與實際不會絕對地相符。
cpp複製**
1 cpixel5starsredflag::cpixel5starsredflag()
2 11
12 m_list_stars[0].posx = m_width*0.2f;
13 m_list_stars[0].posy = m_height*0.35f;
14 m_list_stars[0].radius = m_height*0.1f;
15 m_list_stars[0].angle = 0.0f;
16 17 float r = m_list_stars[0].radius * 3.0f;
18 19 m_list_stars[1].posx = m_list_stars[0].posx + r*cosf(pi/4);
20 m_list_stars[1].posy = m_list_stars[0].posy + r*sinf(pi/4);
21 m_list_stars[1].radius = m_list_stars[0].radius*0.5f;
22 m_list_stars[1].angle = -pi/8;
23 24 m_list_stars[2].posx = m_list_stars[0].posx + r*cosf(pi/12);
25 m_list_stars[2].posy = m_list_stars[0].posy + r*sinf(pi/12);
26 m_list_stars[2].radius = m_list_stars[0].radius*0.5f;
27 m_list_stars[2].angle = -pi/24;
28 29 m_list_stars[3].posx = m_list_stars[0].posx + r*cosf(-pi/12);
30 m_list_stars[3].posy = m_list_stars[0].posy + r*sinf(-pi/12);
31 m_list_stars[3].radius = m_list_stars[0].radius*0.5f;
32 m_list_stars[3].angle = pi/24;
33 34 m_list_stars[4].posx = m_list_stars[0].posx + r*cosf(-pi/4);
35 m_list_stars[4].posy = m_list_stars[0].posy + r*sinf(-pi/4);
36 m_list_stars[4].radius = m_list_stars[0].radius*0.5f;
37 m_list_stars[4].angle = pi/8;
38 }
39 40 bool cpixel5starsredflag::ispointinstar(float x, float y, star& star)
41 49
50 float _s = sinf(star.angle);
51 float _c = cosf(star.angle);
52 53 vec2 p;
54 p.x = i*_c - j*_s;
55 p.y = i*_s + j*_c;
56 57 vec2 listpoints[5];
58 for (unsigned int m = 0; m < 5; m++)
59
63 64 bool bcenter = true;
65 for (unsigned int m = 0; m < 5; m++)
66
77 else if (issameside(vl1, vr1, v, p))
78
81 }
82 83 return bcenter;
84 }
85 86 unsigned int cpixel5starsredflag::calculatepixel(unsigned int x, unsigned int y)
87 100 }
101
102 return red;
103 }
複製**
基類ipixelequation的**見:why數學影象生成工具
python 繪製五星紅旗
1 匯入繪圖包 2import turtle3 自定義繪製圖形位置函式 4def mygoto x,y 5turtle.up 6turtle.goto x,y 7turtle.down 8 自定義繪製五角星函式 9def drow x 10turtle.begin fill 11for i in r...
canvas繪製五星紅旗
lang en charset utf 8 canvas繪製五星紅旗title head id canvas width 600 height 400 canvas var canvas document.getelementbyid canvas var ctx canvas.getcontext...
用python畫個五星紅旗
根據下圖發現,主星和2 3副星從右畫就好,而1 4副星從左開始畫會比較好找座標。turtle.speed 10 主星 turtle.begin fill turtle.up turtle.goto 600,220 turtle.down for i in range 5 turtle.forward...