我想在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;
}
答案 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;解析度。引用他们的例子:
/ .' _,-' __
/ .' _,-' __..--''
/ .' _,-' __..''
/ .' _,-' __..--''
/ .' _,-' __..--''
/ .' _,-' __..--'' ____....----"""
/ .' _,-' __..--'' ____....----""""
/ .' ,-' __..--'' ____....----""""