二阶魔方旋转 魔方可以对它的6个面自由旋转。 我们来操作一个2阶魔方(如图1所示):

Posted 中国风2012

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二阶魔方旋转 魔方可以对它的6个面自由旋转。 我们来操作一个2阶魔方(如图1所示):相关的知识,希望对你有一定的参考价值。


/* 二阶魔方旋转
魔方可以对它的6个面自由旋转。
我们来操作一个2阶魔方(如图1所示):
为了描述方便,我们为它建立了坐标系。

各个面的初始状态如下:
x轴正向:绿
x轴反向:蓝
y轴正向:红
y轴反向:橙
z轴正向:白
z轴反向:黄

假设我们规定,只能对该魔方进行3种操作。分别标记为:
x 表示在x轴正向做顺时针旋转
y 表示在y轴正向做顺时针旋转
z 表示在z轴正向做顺时针旋转

xyz 则表示顺序执行x,y,z 3个操作

题目的要求是:
从标准输入获得一个串,表示操作序列。
程序输出:距离我们最近的那个小方块的3个面的颜色。
顺序是:x面,y面,z面。

例如:在初始状态,应该输出:
绿红白

初始状态下,如果用户输入:
x
则应该输出:
绿白橙

初始状态下,如果用户输入:
zyx
则应该输出:
红白绿

请编程实现所述功能。
 */
import java.util.Scanner;

public class Demo06 
	// x旋转操作
	public static void xSpin(char[] xf, char[] yf, char[] ya, char[] zf,
			char[] za) 
		char yf0 = yf[0];
		char yf2 = yf[2];
		char ya0 = ya[0];
		char ya2 = ya[2];
		// 修改y的前后面
		yf[0] = zf[0];
		yf[2] = zf[2];
		ya[0] = za[0];
		ya[2] = za[2];
		// 修改z的前后面
		zf[0] = ya0;
		zf[2] = ya2;
		za[0] = yf0;
		za[2] = yf2;
		// 修改x前面
		char xf0 = xf[0];
		xf[0] = xf[2];
		xf[2] = xf[3];
		xf[3] = xf[1];
		xf[1] = xf0;
	
	// y旋转操作
	public static void ySpin(char[] xf, char[] xa, char[] yf, char[] zf,
			char[] za) 
		char zf2 = zf[2];
		char zf3 = zf[3];
		char za0 = za[0];
		char za1 = za[1];
		// 修改z的前后面
		zf[2] = xf[3];
		zf[3] = xf[1];
		za[1] = xa[2];
		za[0] = xa[3];
		// 修改x的前后面
		xa[2] = zf2;
		xa[3] = zf3;
		xf[1] = za0;
		xf[3] = za1;
		// 修改y前面
		char yf0 = yf[0];
		yf[0] = yf[2];
		yf[2] = yf[3];
		yf[3] = yf[1];
		yf[1] = yf0;
	
	// z旋转操作
	public static void zSpin(char[] xf, char[] xa, char[] yf, char[] ya,
			char[] zf) 
		char xf0 = xf[0];
		char xf1 = xf[1];
		char xa2 = xa[2];
		char xa0 = xa[0];
		// 修改x的前后面
		xf[0] = yf[0];
		xf[1] = yf[1];
		xa[0] = ya[2];
		xa[2] = ya[3];
		// 修改y的前后面
		yf[0] = xa2;
		yf[1] = xa0;
		ya[3] = xf0;
		ya[2] = xf1;
		// 修改z前面
		char zf0 = zf[0];
		zf[0] = zf[2];
		zf[2] = zf[3];
		zf[3] = zf[1];
		zf[1] = zf0;
	
	public static void main(String[] args)
		char[] xf = '绿','绿','绿','绿';	// x前
		char[] xa = '蓝','蓝','蓝','蓝';	// x后
		
		char[] yf = '红','红','红','红';	// y前
		char[] ya = '橙','橙','橙','橙';	// y后
		
		char[] zf = '白','白','白','白';	// z前
		char[] za = '黄','黄','黄','黄';	// z后
		
		Scanner scan = new Scanner(System.in);
		System.out.println("输入关于xyz的字符串");
		String s = scan.nextLine();
		char[] c = s.toCharArray();	// 输入的数据以每个字符来操作
		for(int i=0;i<c.length;i++)
			switch(c[i])
				case 'x': 	// x旋转操作
					xSpin(xf, yf, ya, zf, za);
				break;
				case 'y': 	// y旋转操作
					ySpin(xf, xa, yf, zf, za);
				break;
				case 'z': 	// z旋转操作
					zSpin(xf, xa, yf, ya, zf);
				break;
			
		
		System.out.println(xf[1]+""+yf[0]+""+zf[2]);
	
运行结果:
输入关于xyz的字符串
zyx
红白绿

以上是关于二阶魔方旋转 魔方可以对它的6个面自由旋转。 我们来操作一个2阶魔方(如图1所示):的主要内容,如果未能解决你的问题,请参考以下文章

3D魔方的思路与实现

简单说 用CSS做一个魔方旋转的效果

MATLAB画三维动态魔方/旋转魔方/旋转立方体

MATLAB画三维动态魔方/旋转魔方/旋转立方体

用CSS代码做出一个简单的自动旋转正方体(css魔方原理)

用CSS代码做出一个简单的自动旋转正方体(css魔方原理)