C++:Flags with Stars Tutorial
From Progzoo
Drawing flags: reusing shapes.
Vietnam
We use a slightly different method to draw shapes now. We construct a
list of actions then execute them in one go.
We can put a translation in place before drawing the star:
dl.push_back(DrawableTranslation(100,100));
The flag of Vietnam has a yellow five pointed star on a red
background. This star is a popular device on many flags, we define
the star once and use it many times in later flags.
The given star has a radius of 100, it is centred on 0,0
which is the wrong place. We must translate to put it in the
right place.
test text
Panama
The flag of Panama requires two stars. We can draw the same star
twice.
.
static void drawFlag(Image& g){
// Define the polygon star
std::list<Coordinate> star;
star.push_back(Coordinate(0,-50));
star.push_back(Coordinate(11,-16));
star.push_back(Coordinate(48,-16));
star.push_back(Coordinate(18,6));
star.push_back(Coordinate(30,42));
star.push_back(Coordinate(0,19));
star.push_back(Coordinate(-30,41));
star.push_back(Coordinate(-18,6));
star.push_back(Coordinate(-48,-16));
star.push_back(Coordinate(-11,-16));
// Build up a list of Drawable
std::list<Magick::Drawable> dl;
dl.push_back(DrawablePushGraphicContext());
dl.push_back(DrawableFillColor("white"));
dl.push_back(DrawableRectangle(0,0,800,60));
dl.push_back(DrawableFillColor("blue"));
dl.push_back(DrawableRectangle(0,200,300,400));
dl.push_back(DrawableTranslation(150,100));
dl.push_back(DrawablePolygon(star));
dl.push_back(DrawableTranslation(100,0));
dl.push_back(DrawablePolygon(star));
dl.push_back(DrawablePopGraphicContext());
g.draw(dl);
}
[Font ]
[Default ]
[Show ]
[Resize ]
[History ]
[Profile ]
test text
Bosnia and Herzegovina
The flag of Bosnia and Herzegovina includes 9 white stars.
Each star is 38 right and 38 below the previous star.
.
static void drawFlag(Image& g){
// Define the polygon star
std::list<Coordinate> star;
star.push_back(Coordinate(0,-25));
star.push_back(Coordinate(6,-8));
star.push_back(Coordinate(24,-8));
star.push_back(Coordinate(9,3));
star.push_back(Coordinate(15,20));
star.push_back(Coordinate(0,9));
star.push_back(Coordinate(-15,20));
star.push_back(Coordinate(-9,3));
star.push_back(Coordinate(-24,-8));
star.push_back(Coordinate(-6,-8));
std::list<Coordinate> tri;
tri.push_back(Coordinate(160,0));
tri.push_back(Coordinate(464,0));
tri.push_back(Coordinate(464,304));
// Build up a list of Drawable
std::list<Magick::Drawable> dl;
dl.push_back(DrawablePushGraphicContext());
dl.push_back(DrawableFillColor("blue"));
dl.push_back(DrawableRectangle(0,0,600,304));
dl.push_back(DrawableFillColor("yellow"));
dl.push_back(DrawablePolygon(tri));
dl.push_back(DrawableTranslation(105,0));
dl.push_back(DrawablePolygon(star));
dl.push_back(DrawableTranslation(38,38));
dl.push_back(DrawablePolygon(star));
dl.push_back(DrawablePopGraphicContext());
g.draw(dl);
}
[Font ]
[Default ]
[Show ]
[Resize ]
[History ]
[Profile ]
test text
Democratic Republic of Congo (formerly Zaire)
The large star has a radius of 100, the 6 smaller stars have a radius
of 10.
.
static void drawFlag(Image& g){
// Define the polygon star
std::list<Coordinate> star;
star.push_back(Coordinate(0,-100));
star.push_back(Coordinate(22,-31));
star.push_back(Coordinate(95,-31));
star.push_back(Coordinate(36,12));
star.push_back(Coordinate(59,81));
star.push_back(Coordinate(0,38));
star.push_back(Coordinate(-59,81));
star.push_back(Coordinate(-36,12));
star.push_back(Coordinate(-95,-31));
star.push_back(Coordinate(-22,-31));
// Build up a list of Drawable
std::list<Magick::Drawable> dl;
dl.push_back(DrawablePushGraphicContext());
dl.push_back(DrawableFillColor(
ColorRGB(.69,.84,.9)));
dl.push_back(DrawableRectangle(0,0,500,300));
dl.push_back(DrawableFillColor("yellow"));
dl.push_back(DrawableTranslation(250,150));
dl.push_back(DrawablePolygon(star));
dl.push_back(DrawableTranslation(50-250,25-150));
dl.push_back(DrawableScaling(.5,.5));
dl.push_back(DrawablePolygon(star));
dl.push_back(DrawablePopGraphicContext());
g.draw(dl);
}
[Font ]
[Default ]
[Show ]
[Resize ]
[History ]
[Profile ]
test text