Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- * File: Sierpinski.cpp
- * --------------------------
- * Name: Ana Gurgenidze
- * Section: #2, Michael Nemsitsveridze
- * This file is the final project for the Sierpinski problem
- * on Assignment #3.
- * The program draws Sierpinski triangle.
- */
- #include <iostream>
- #include "gwindow.h"
- #include <cmath>
- using namespace std;
- void drawSierpinski(double lng, int rank, double x, double y, GWindow &gw, int &index);
- /* draws single triangle */
- void makeLine(double size, double x, double y, GWindow &gw, int &index) {
- double theta = index * 45;
- GPoint p1 = gw.drawPolarLine(x, y, size, theta);
- }
- int main() {
- GWindow gw;
- double lng; // length of the starting triangle
- int rank; // Sierpinski triangle level
- cin >> lng >> rank;
- double x = gw.getWidth() / 2; // starting X coordinate
- double y = gw.getHeight(); // starting Y coordinate
- int start = 2;
- drawSierpinski(lng, rank, x, y, gw, start);
- return 0;
- }
- /* Recursive function that draws Sierpinski triangle */
- void drawSierpinski(double lng, int rank, double x, double y, GWindow &gw, int &index) {
- int i = (index + 1) % 8;
- int j = abs(index - 1) % 8;
- if (rank == 0) {
- makeLine(lng, x, y, gw, index);
- } else {
- switch (index) {
- case 0:
- x += lng;
- break;
- case 1:
- x += lng * sqrt(2.0);
- y -= lng * sqrt(2.0);
- break;
- case 2:
- y -= lng;
- break;
- case 3:
- x -= lng * sqrt(2.0);
- y -= lng * sqrt(2.0);
- break;
- case 4:
- x -= lng;
- break;
- case 5:
- x -= lng * sqrt(2.0);
- y += lng * sqrt(2.0);
- break;
- case 6:
- y += lng;
- break;
- default:
- x += lng * sqrt(2.0);
- y += lng * sqrt(2.0);
- }
- lng /= 2;
- rank --;
- drawSierpinski(lng, rank, x, y, gw, i);
- drawSierpinski(lng, rank, x, y, gw, j);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement