在 C++ 中使用嵌套 for 循环的更复杂的形状

More complex shapes using nested for loops in C++

我看到一些他们做 X 或三角形或菱形等简单示例的地方。我想知道如何制作像这样的复杂形状:

#                 #
 ##             ##
  ###         ###
   ####     ####
    ###########
    ###########
   ####     ####
  ###         ###
 ##             ##
#                 #

我是编程新手,不知道代码本身的基本功能

#include <iostream>
using namespace std;
int main(int argc, char **argv)
{
  int spaces = 4;
  int hashes = 1;
  for(int row=0;row<10;row++)
  {
      for(int spaces=0;spaces<4;spaces++)
      {
          cout<<" ";
      }
      for(int hashes=0;hashes<1;hashes++)
      {
          cout<<"#";
      }
      cout<<endl;

      if(row<5&&row>6)
      {
          spaces--;
          hashes+=2;
      }
      else
      {
          spaces++;
          hashes-=2;
      }

  } 
  return 0;
}

一种简单的方法是使用 "raytracing" 方法;即

for (int y=0; y<rows; y++) {
    for (int x=0; x<cols; x++) {
        if (func(x, y)) {
            std::cout << "#";
        } else {
            std::cout << " ";
        }
    }
    std::cout << "\n";
}

例如 rows = cols = 20func 定义为

bool func(int x, int y) {
    return (x-10)*(x-10) + (y-10)*(y-10) < 8*8;
}

你会得到一个圆圈

许多绘制像您这样的形状的作业都是基于水平和垂直方向的对称性。例如,在水平方向上,从左到中的字符在中心点之后进行镜像。

绘制形状的老式方法是将它们存储在二维数组中,然后打印出该数组:

unsigned char letter_E[7][5] =
{
  {'*', '*', '*', '*', '*'},
  {'*', ' ', ' ', ' ', ' '},
  {'*', ' ', ' ', ' ', ' '},
  {'*', '*', '*', '*', '*'},
  {'*', ' ', ' ', ' ', ' '},
  {'*', ' ', ' ', ' ', ' '},
  {'*', '*', '*', '*', '*'},
};

for (unsigned int row = 0; row < 7; ++row)
{
  for (unsigned int column = 0; column < 5; ++column)
  {
    std::cout << letter_E[row][column];
  }
  std::cout << '\n';
}

此外,在互联网上搜索 "ASCII art"。