2016-02-21 4 views
0

Я работаю над проектом кодирования, в котором мы рисуем различные формы, используя звездочки. Я до сих пор рисовал X, прямоугольник и верхнюю и нижнюю части квадрата. В последнем проекте мы рисуем круг, и тот же метод, который я использовал для 4 предыдущих проектов, - создавая разновидность сетки, используя вложенные и если еще петли, и указывая, где рисовать "" или " * "не хватает. Вот мой код:Рисование круга на C++, но рисование алмаза вместо

int main() { 

int rad; // int for radius 


cout << "We are creating a circle made of asterisks. Please input the radius: " << endl; 
cin >> rad; 

int i; 
int t; 


for(i = 1 ; i <= (rad * 2) + 1; i++) 
{ 
    for(t = 1; t <= (rad * 2) + 1 ; t++) 
    { 
     if((i == 1 && t == rad + 1) /*|| (i == (rad * 2) && t == rad + 1) || (i == rad/2 && t == rad/2)*/) 
     { 
      cout << "*"; 
     } 
     else if (i >= 2 && i <= rad && t == (rad+1) - (i-1)) 
     { 
      cout << "*"; 
     } 
     else if (i >= 2 && i <= rad && t == (rad+1) + (i-1)) 
     { 
      cout << "*"; 
     } 
     else if (i >= rad && t == (i - rad)) 
     { 
      cout << "*"; 
     } 
     else if (i >= rad && t == (rad * 2) + 2 - (i - rad)) 
     { 
      cout << "*"; 
     } 
     else 
     { 
      cout << " "; 
     } 
    } 
    cout<< endl; 
} 
return 0; 
} 

Вывод данных выше? Совершенный алмаз:

We are creating a circle made of asterisks. Please input the radius: 5 

    *  
    * *  
    * * 
    *  * 
*  * 
*   * 
*  * 
    *  * 
    * * 
    * *  
    * 

Очевидно, что мой метод не работает. Я попытался настроить мои параметры, чтобы увеличить расстояние между звездочками, создав некое приблизительное приближение круга, но это выглядит не так. Я не могу не думать, что должен быть элегантный, превосходный способ сделать это. Может быть, более математический подход, который использует радиус. Любые предложения или советы?

+1

Как вы можете нарисовать круг без использования геометрии? – stark

+2

Что делает точки круга ... круга, это: ** (x-cx)^2 + (y-cy)^2 = r^2 **. У вас есть неоправданное количество условий. –

+0

Вы можете это проверить: [Посетите это] (http://stackoverflow.com/questions/24356723/how-to-draw-a-circle-with-asterisk-function-in-ruby) –

ответ

1

Вот более математический подход, который использует радиус нарисовать круг.

#include <iostream> 
#include <math.h> 

using namespace std; 

int pth (int x,int y) { 
    return sqrt (pow(x,2)+pow(y,2)); 
} 

int main () { 

    int c=0; 
    int r=10; 

    const int width=r; 
    const int length=r*1.5; 

    for (int y=width;y >= -width;y-=2) { 
     for (int x=-length;x <= length;x++) { 

      if ((int) pth(x,y)==r) cout << "*"; 
      else cout << " "; 

     } 
     cout << "\n"; 
    } 
    cin.get(); 

return 0; 
} 
Смежные вопросы