filling a circle with stripes [fltk]

Bjarne Stroustrup “Programming Principles and Practice Using C++”
Chapter 14 Exercise 6
Using GUI library called FLTK (Fast Light Tool Kit, “full tick”).

Output:

//  Philipp Siedler
//  Bjarne Stroustrup's PP
//  Chapter 14 Exercise 6

#define _USE_MATH_DEFINES
#include "Simple_window.h"
#include "Graph.h"
#include <cmath>
using namespace Graph_lib;

Point operator+(Point& p1, Point& p2) {
	Point p3 = Point(p1.x + p2.x, p1.y + p2.y);
	return p3;
}

class Striped_circle : public Circle
{
public:
	Striped_circle(Point a, int r)
		:Circle(a, r), a(a), r(r)
	{
		Circle::set_color(Color::red);
		set_fill_color();
	}

	void set_fill_color();
	void draw_lines() const;

private:
	Point a;
	int r;
	Lines pattern;
};

void Striped_circle::set_fill_color()
{

	for (int i = - r; i < r; i += 5) {
		int x = sqrt(pow(r, 2) - pow(i, 2));
		Point pt(x, i);
		pattern.add(pt + a, Point(-pt.x, pt.y) + a);
	}
	pattern.set_color(Color::blue);
}

void Striped_circle::draw_lines() const
{
	pattern.draw();
	Circle::draw_lines();
}

int main()
try
{
	Point tl(100, 100);
	Simple_window win(tl, 720, 400, "Simple Window");
	Point center(win.x_max() / 2, win.y_max() / 2);

	Striped_circle circle(center, 100);

	win.attach(circle);
	win.wait_for_button();
}
catch (exception& e) {
	cout << e.what() << endl;
	return 1;
}
catch (...) {
	cout << "Exiting" << endl;
	return 2;
}

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.