Etéreo 拿出家里的许多的立方体积木,堆成了一个三维空间中的模型。既然你高考选了技术, 那想必你一定想知道,这个模型的三视图是什么吧!
图中,
轴、
轴和
轴的方向已经标明。现在规定,图中的红色面为主视面,蓝色面为右视面(注意输出中应为左视而非右视),黄色面为俯视面。具体方向可以观察样例。
第一行四个数,表示该三维空间大小为
,且有
个立方体。
接下去行,每行三个整数
,表示其位置坐标。
输出共行,前
行每行
个字符,输出正视图及左视图,两幅图之间有一列空格;接下去输出一个空行;再接下去
行,每行
个字符,表示俯视图。
其中表示空,
表示有立方体。
2 2 2 2 1 1 1 2 2 2
.x .x x. x. x. .x
3 3 3 3 1 1 2 2 1 1 1 2 1
... ... x.. x.. xx. xx. xx. x.. ...
这里可以把图片拉出去放大看哦~
int len1 = X + Z + 2; // 前Y行的长度:X+空格+Z+换行
int len2 = X + 1; // 后Z行的长度:X+换行
byte[] buf = new byte[Y * len1 + 1 + Z * len2]; // 创建缓冲区
Arrays.fill(buf, (byte)'.'); // 全部初始化成点
for (int y = 1; y <= Y; y++) { // 前Y行的空格和换行
buf[y * len1 - Z - 2] = ' ';
buf[y * len1 - 1] = '\n';
}
for (int z = 0; z <= Z ; z++) { // 后Z行的换行
buf[Y * len1 + z * len2] = '\n';
}
for (int i = 0; i < N; i++) {
int x = in.nextInt() - 1; // x坐标正向(从左向右)
int y = Y - in.nextInt(); // y坐标反向(从下向上)
int z = in.nextInt() - 1; // z坐标正向(从左向右、从上向下)
buf[y * len1 + x] = 'x'; // 主视图(第y行第x列)
buf[y * len1 + X + 1 + z] = 'x'; // 左视图(第y行第z列)
buf[Y * len1 + 1 + z * len2 + x] = 'x'; // 俯视图(第z行第x列)
}
System.out.write(buf); // 输出