演算法生成五星紅旗

2022-09-23 17:48:10 字數 2972 閱讀 7250

這一篇將提供一套生成五星紅旗的演算法,**中滿滿都是正能量。上一篇文章是生成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...