如何用星号画一个圆?Ruby中的函数 我正在上红宝石和C++课程,我必须要解决这个问题。你必须画一个带星号的圆。我在互联网上搜索了很多,但找不到任何完整的解决方案。我想解释一下原因,这样你就不仅仅是在复制代码,你将能够理解它是如何工作的
让我们开始工作:如何用星号画一个圆?Ruby中的函数 我正在上红宝石和C++课程,我必须要解决这个问题。你必须画一个带星号的圆。我在互联网上搜索了很多,但找不到任何完整的解决方案。我想解释一下原因,这样你就不仅仅是在复制代码,你将能够理解它是如何工作的,c++,ruby,draw,asterisk,geometry,C++,Ruby,Draw,Asterisk,Geometry,让我们开始工作: 1) 您需要记住,圆是验证公式的一组点,那么哪个公式可以在圆中绘制圆 2) 你会发现很多公式,复杂的代码等等。但若你们停下来想想圆的每一点,你们会发现圆周上的每一点都是由to坐标(x,y)决定的 3) 你要做的是取一个公式,把它放在一个条件下,每次平面上的一个点验证公式打印“*”,这样你就可以画圆了 4) 如何贯穿所有要点?你需要两个循环。第一个在“y”上移动,第二个在“x”上移动,看起来是这样的: r = 5 y = r until y less -
1) 您需要记住,圆是验证公式的一组点,那么哪个公式可以在圆中绘制圆 2) 你会发现很多公式,复杂的代码等等。但若你们停下来想想圆的每一点,你们会发现圆周上的每一点都是由to坐标(x,y)决定的 3) 你要做的是取一个公式,把它放在一个条件下,每次平面上的一个点验证公式打印“*”,这样你就可以画圆了 4) 如何贯穿所有要点?你需要两个循环。第一个在“y”上移动,第二个在“x”上移动,看起来是这样的:
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
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
5) 好的,现在你有了一个循环,根据半径通过所有的“x”和“y”。
现在,您需要公式来验证要打印的点。我用的是毕达哥拉斯定理:H^2=C^2+C^2 !![毕达哥拉斯圈][1] 看这张图,我们可以说:r^2=x^2+y^2,现在通过这个公式,你知道哪些点属于圆 6) 问题是,您正在使用一个稍大的字符来绘制一个完美的圆,因此您希望打印所有接近完美圆的点。您必须定义两个与用户输入的半径相近的新半径,然后打印该区域内的所有点。
所以你要有一个in_半径和一个out_半径,你要做的就是从原始半径中减去一些in_半径,再加上一些out_半径
in_radius = radius - 0.4
out_radius = radius + 0.4
您将使用此半径作为条件,以验证属于圆的点。validation子句如下所示:
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
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
将所有代码放在一起,最终代码如下所示:
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
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
这就是它的外观:
*********
*** ***
** **
** **
** **
** **
* *
* *
* *
** **
** **
** **
** **
*** ***
*********
我希望这是有帮助的洛佩兹J < /P> < P>这是一个等价的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;
}
你可以问这个问题,并将此作为答案发布。还有,C++在哪里?我很困惑。你到底在问什么?这个问题似乎离题了,因为作者正在使用Stack Overflow作为他的个人博客。对不起,伙计们,我发布它只是为了给这个很棒的网站做贡献。我总是不断地从这里学习,所以我认为这对一些开始做编程的人来说是很有帮助的。我的目的是帮助和分享,就是这样。请不要鼓励他/她提出不好的问题。@jww至于我,我喜欢这个问题。我看到了如何画一个圆。