#include "ofApp.h"	
 
//--------------------------------------------------------------
void ofApp::setup() {
 
	ofSetFrameRate(60);
	ofSetWindowTitle("openFrameworks");
 
	ofBackground(239);
	ofSetColor(39);
	ofSetLineWidth(2);
}
 
//--------------------------------------------------------------
void ofApp::update() {
 
}
 
//--------------------------------------------------------------
void ofApp::draw() {
 
	ofTranslate(ofGetWidth() * 0.5, ofGetHeight() * 0.5);
	ofRotate(ofGetFrameNum() * 0.5);
 
	for (auto radius = 150; radius <= 400; radius += 8) {
 
		auto deg_start = ofGetFrameNum() + radius + 60;
		for (auto deg = deg_start; deg < deg_start + 360; deg += 120) {
 
			vector<glm::vec2> vertices;
			for (auto tmp_deg = deg - 60; tmp_deg <= deg + 60; tmp_deg += 1) {
 
				vertices.push_back(glm::vec2(this->make_point(radius, tmp_deg)));
			}
 
			ofFill();
			ofSetColor(ofMap(radius, 150, 400, 39, 239));
			ofBeginShape();
			ofVertices(vertices);
			ofEndShape(true);
 
			ofNoFill();
			ofSetColor(ofMap(radius, 150, 400, 239, 39));
			ofBeginShape();
			ofVertices(vertices);
			ofEndShape(true);
		}
	}
}
 
//--------------------------------------------------------------
glm::vec2 ofApp::make_point(int radius, int deg) {
 
	deg = deg % 360;
 
	int deg_a = (deg / 120) * 120;
	int deg_b = deg_a + 120;
	int diff = deg - deg_a;
 
	auto point_a = glm::vec2(radius * cos(deg_a * DEG_TO_RAD), radius * sin(deg_a * DEG_TO_RAD));
	auto point_b = glm::vec2(radius * cos(deg_b * DEG_TO_RAD), radius * sin(deg_b * DEG_TO_RAD));
	auto distance = point_b - point_a;
 
	return point_a + (distance / 120) * diff;
}
 
//--------------------------------------------------------------
int main() {
 
	ofSetupOpenGL(720, 720, OF_WINDOW);
	ofRunApp(new ofApp());
}