Advertisement
Anophoo

Sierpinski Ext

May 1st, 2016
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.79 KB | None | 0 0
  1. /*
  2. * File: Sierpinski.cpp
  3. * --------------------------
  4. * Name: Ana Gurgenidze
  5. * Section: #2, Michael Nemsitsveridze
  6. * This file is the final project for the Sierpinski problem
  7. * on Assignment #3.
  8. * The program draws Sierpinski triangle.
  9. */
  10.  
  11. #include <iostream>
  12. #include "gwindow.h"
  13. #include <cmath>
  14. using namespace std;
  15.  
  16. void drawSierpinski(double lng, int rank, double x, double y, GWindow &gw, int &index);
  17.  
  18. /* draws single triangle */
  19. void makeLine(double size, double x, double y, GWindow &gw, int &index) {
  20. double theta = index * 45;
  21. GPoint p1 = gw.drawPolarLine(x, y, size, theta);
  22. }
  23.  
  24. int main() {
  25. GWindow gw;
  26. double lng; // length of the starting triangle
  27. int rank; // Sierpinski triangle level
  28. cin >> lng >> rank;
  29. double x = gw.getWidth() / 2; // starting X coordinate
  30. double y = gw.getHeight(); // starting Y coordinate
  31. int start = 2;
  32. drawSierpinski(lng, rank, x, y, gw, start);
  33. return 0;
  34. }
  35.  
  36. /* Recursive function that draws Sierpinski triangle */
  37. void drawSierpinski(double lng, int rank, double x, double y, GWindow &gw, int &index) {
  38. int i = (index + 1) % 8;
  39. int j = abs(index - 1) % 8;
  40. if (rank == 0) {
  41. makeLine(lng, x, y, gw, index);
  42. } else {
  43. switch (index) {
  44. case 0:
  45. x += lng;
  46. break;
  47. case 1:
  48. x += lng * sqrt(2.0);
  49. y -= lng * sqrt(2.0);
  50. break;
  51. case 2:
  52. y -= lng;
  53. break;
  54. case 3:
  55. x -= lng * sqrt(2.0);
  56. y -= lng * sqrt(2.0);
  57. break;
  58. case 4:
  59. x -= lng;
  60. break;
  61. case 5:
  62. x -= lng * sqrt(2.0);
  63. y += lng * sqrt(2.0);
  64. break;
  65. case 6:
  66. y += lng;
  67. break;
  68. default:
  69. x += lng * sqrt(2.0);
  70. y += lng * sqrt(2.0);
  71. }
  72. lng /= 2;
  73. rank --;
  74. drawSierpinski(lng, rank, x, y, gw, i);
  75. drawSierpinski(lng, rank, x, y, gw, j);
  76. }
  77. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement