如何在控制台中用c ++中的对角线和对称轴绘制一个矩形?

时间:2018-05-15 20:30:52

标签: c++ console draw

我想在consol中画一个带*的矩形。现在我有代码绘制矩形的圆周及其对称轴,但我不知道如何绘制对角线。你能帮助我吗?这是我的代码

#include <iostream>
#include <stdio.h>
#include <stdlib.h>

#include <math.h>


int main(int argc, char *argv[]) {
int s,d;
    printf ("the length of the rectangle \n");
    scanf ("%d",&s);
    printf ("width of the rectangle \n ");
    scanf ("%d",&d);
    int l;
    int p;
    int przekatna; 

    for (p=1; p<=s; p++)
    {
    printf ("\n");
    for (l=1;l<=d; l++)
    {

    if(p==1 || l==1 || l==d || s==p || p==((d+1)/2)  ) printf("*"); else printf(" ");
    if ( l==(d)/2 && p!=((d+1)/2) && p!=1 && p!=s) 
    printf("*"); else printf(""); 


    }
}
     return 0;
}

编辑,它很好的代码,它的工作我的老师向我解释了如何制作对角线,这是什么

#include <stdlib.h>

#include <math.h>

int main() {
    int l;
    int p;
    int s;
    int d;
    printf ("the length of the rectangle  \n");
    scanf ("%d",&s);
    printf ("width of the rectangle  \n ");
    scanf ("%d",&d);

    for (p=1; p<=s; p++)
    {
    printf ("\n");
    for (l=1;l<=d; l++)

    {

    if(p==1 || l==1 || l==d || s==p 
    || p==s/2 || l==l/2 ||
     l==p*round(d/s) || l==(s+1-p)*round(d/s) )

    printf("*"); else printf(" ");


    }
  }
      return 0;
    }

1 个答案:

答案 0 :(得分:4)

这实际上根本不是一个小问题!

你看,对角线(当我们想象它们是与圆周线宽度相同的线条时)不能很好地对应整数坐标。因此,如果你使用'*'个字符,要么你会有太多 - 每行几个 - 或者太少,行中断。

您可能希望使用Bresenham's line drawing algorithm来解决此问题。

或者 - 如果你想要简单化,并且每行放置一个'*',使用对角线的公式,使用舍入,以选择最佳值,而不考虑其他线:

  

major_diagonal_y =(x - start_x)*((float)rectangle_y_dim)/ rectangle_x_dim

(假设x是垂直维度,y是水平维度;你使用其他符号,但我发现它们有点令人困惑。)

对于相反(次要)对角线,请使用

  

minor_diagonal_y = rectangle_y_dim - major_diagonal_y

如果您愿意使用其他字符,可以参考this tutorial on ASCII art,其中有关于对角线的部分。它演示了如何改变字符的使用以有效地具有&#34;子字符&#34;解析度。引用他们的例子:

       /         .'               _,-'                            __
      /        .'             _,-'                        __..--''
     /       .'           _,-'                      __..''
    /      .'         _,-'                  __..--''
   /     .'       _,-'              __..--''
  /    .'     _,-'          __..--''                   ____....----"""
 /   .'   _,-'      __..--''           ____....----""""
/  .'  ,-'  __..--''   ____....----""""