Как нарисовать круг звездочкой? функция в Ruby

Я беру курс по Ruby и C ++, и мне пришлось решить эту проблему. Вы должны нарисовать круг звездочкой. Я много искал в интернете, но не смог найти полного решения. Я хочу объяснить причину, так что вы не просто копируете код, вы сможете понять, как он работает.

Давайте начнем работать:
1) Вы должны иметь в виду, что круг — это группа точек, которые проверяют формулу, поэтому какая формула может нарисовать круг в Декартова плоскость?

2) Вы найдете много формул, сложный код и так далее. Но если вы остановитесь и подумаете о каждой точке окружности, вы обнаружите, что каждая точка окружности определяется координатами (x, y)

3) То, что вы хотите сделать, это взять формулу, поместить ее в условие, и каждый раз, когда точка на плоскости проверяет формулу, выведите «*», таким образом, вы будете рисовать круг.

4) Как пройти все пункты? ну, вам понадобятся две петли. Первый будет перемещаться по «у», а второй по «х» будет выглядеть так:

    r = 5
y = r

until y less -r do
x = -r
until x >= r do
if (validation condition)
print '*'
else
print ' '
end
x += 1
end
print "\n"y -= 1
end

5) Хорошо, теперь у вас есть цикл для прохождения всех «х» и «у» в зависимости от радиуса.
Теперь вам нужна формула для проверки точек, которые вы хотите напечатать.
Я использовал теорему Пифагора: H ^ 2 = C ^ 2 + c ^ 2

![Круг Пифагора] [1]

Итак, глядя на изображение, мы можем сказать: r ^ 2 = x ^ 2 + y ^ 2 теперь с помощью этой формулы вы знаете, какие точки принадлежат окружности.

6) Проблема в том, что вы используете немного более крупный символ, чтобы нарисовать круг префекта, поэтому вы хотите напечатать все точки, близкие к идеальному кругу. Вы должны определить два новых радиуса, близких к введенному пользователем, а затем распечатать все точки, которые находятся внутри этой области.
Таким образом, у вас будут in_radius и out_radius, и вы просто отнимите некоторые из исходного радиуса для in_radius, и вы добавите некоторые для out_radius.

    in_radius = radius - 0.4
out_radius = radius + 0.4

Вы будете использовать этот радиус для условия для проверки точек, которые принадлежат окружности. Предложение проверки будет выглядеть так:

    if (x^2 + y^2 >= in_radius)&&(x^2 + y^2 less= out_radius)
print '*'
else
print ' '
end

Собрав все вместе, ваш окончательный код будет выглядеть так:

    r = 7
y = r

r_in = r-0.4
r_out = r+0.4

until y less -r do
x = -r
until x >= r_out do
if (x*x + y*y >= r_in*r_in)&&(x*x + y*y less= r_out*r_out)
print '*'
else
print ' '
end
x += 0.5
end
print "\n"y -= 1
end

Вот как это выглядит:

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

Я надеюсь, что это было полезно
Ire Ezequiel J Lopez

-1

Решение

Вот эквивалентный код C ++

#include <iostream>int main()
{
double r = 7.0;
double r_in  = r - 0.4;
double r_out = r + 0.4;

for ( double y = r; y >= -r; --y )
{
for ( double x = -r; x < r_out; x += 0.5 )
{
double value = x * x + y * y;
if ( value >= r_in * r_in && value <= r_out * r_out )
{
std::cout << '*';
}
else
{
std::cout << ' ';
}
}
std::cout << std::endl;
}

return 0;
}

Выход

          *********
***           ***
**                 **
**                     **
**                       **
**                         **
*                           *
*                           *
*                           *
**                         **
**                       **
**                     **
**                 **
***           ***
*********
0

Другие решения


По вопросам рекламы ammmcru@yandex.ru
Adblock
detector