绘制透视图应该从最下面和最后面的正方体开始绘制,构造绘制正方体函数,每次为函数传立方体左上角的坐标,最后再遍历数组找到绘出的图形的边界,代码如下:
#include <bits/stdc++.h>
using namespace std;
const int N = 1000;
char s[6][8] = {
"..+---+",
"./ /|",
"+---+ |",
"| | +",
"| |/",
"+---+",};
char re[N][N];
int n,m;
void write(int x,int y){
for(int i=0;i<6;i++){
for(int j=0;j<8;j++){
if(s[i][j]!='.'&&s[i][j]!='\0'){
re[x+i][y+j] = s[i][j];
}
}
}
}
int main()
{
cin >> n >> m;
int a[55][55];
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++){
cin >> a[i][j];
}
}
memset(re,'.',sizeof(re));
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
for(int k=0;k<a[i][j];k++){
int r = 500 - (k * 3) - (n - i) * 2;
int c = 2*(n-i)+(j-1)*4;
write(r,c);
}
}
}
int minR = 1000,maxR = 0,minC = 1000,maxC =0;
for(int i=0; i<1000; i++)
for(int j=0; j<1000; j++)
if(re[i][j] != '.') {
minR = min(minR, i); maxR = max(maxR, i);
minC = min(minC, j); maxC = max(maxC, j);
}
for(int i=minR;i<=maxR;i++){
for(int j=0;j<=maxC;j++){
cout << re[i][j];
}
cout << endl;
}
return 0;
}
525

被折叠的 条评论
为什么被折叠?



