`

魔方图像化初试

    博客分类:
  • Java
阅读更多
接上一篇,图像化初步尝试
代码没有优化
package com.onezero;

import java.awt.*;
import javax.swing.*;

public class CubePaint extends JFrame{
	private static double[][] points={};
	private MagicCube mc;
	
	CubePaint(){
		super("魔方游戏");
		mc = new MagicCube(CubeNode.getOriginNode());
		this.setSize(600,620);
		final CubeCanvas cc = new CubeCanvas(this);
		this.add(cc);
		this.setVisible(true);
		new Thread(){
			public void run(){
				try{
				do{
					mc.rotate(1, 0);
					cc.repaint();
					Thread.sleep(5000);
					if(mc.equals(MagicCube.ORIGINCUBE))break;
					mc.rotate(2, 0);
					cc.repaint();
					Thread.sleep(5000);
					if(mc.equals(MagicCube.ORIGINCUBE))break;
					mc.rotate(-1, 2);
					cc.repaint();
					Thread.sleep(5000);
					if(mc.equals(MagicCube.ORIGINCUBE))break;
					mc.rotate(-2, 2);
					cc.repaint();
					Thread.sleep(5000);
					if(mc.equals(MagicCube.ORIGINCUBE))break;
				}while(true);
				}catch(Exception e){
					
				}
			}
		}.start();
	}

	public MagicCube getMc() {
		return mc;
	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		new CubePaint();
	}

}

class CubeCanvas extends JComponent {
	static int wall = 20;
	static int space = 3;
	private MagicCube mc;
	private CubePaint cp;
	private int width, height;
	private int wspace, hspace;
	private int len;
	
	CubeCanvas(CubePaint cp){
		this.cp = cp;
		this.mc = cp.getMc();
		width = cp.getWidth();
		height = cp.getHeight()-20;
		len = (Math.min(width, height) - 2 * wall) / 9;
		wspace = (width - 9*len)/2;
		hspace = (height - 9*len)/2;
	}
	
	public void paint(Graphics g) {
		width = cp.getWidth();
		height = cp.getHeight()-20;
		len = (Math.min(width, height) - 2 * wall) / 9;
		wspace = (width - 9*len)/2;
		hspace = (height - 9*len)/2;
		for(int i=0;i<27;i++){
			if(i==13)continue;
			draw(g,mc.getCubeNode(i));
		}
	}
	
	private void draw(Graphics g, CubeNode node){
		if(node==null)return;
		int[] xyz = node.location.xyz;
		if(xyz[Point3D.Y]==0){
			//前面
			int[] xPoints = getxPoints(xyz,1);
			int[] yPoints = getyPoints(xyz,1);
			g.setColor(getColor(node.nodecolor.getColorId(1)));
			g.fillPolygon(xPoints, yPoints, 4);
			g.setColor(Color.BLACK);
			g.drawPolygon(xPoints, yPoints, 4);
		}
		if(xyz[Point3D.X]==2){
			//右面
			int[] xPoints = getxPoints(xyz,2);
			int[] yPoints = getyPoints(xyz,2);
			g.setColor(getColor(node.nodecolor.getColorId(2)));
			g.fillPolygon(xPoints, yPoints, 4);
			g.setColor(Color.BLACK);
			g.drawPolygon(xPoints, yPoints, 4);
		}
		if(xyz[Point3D.Z]==2){
			//上层
			int[] xPoints = getxPoints(xyz,5);
			int[] yPoints = getyPoints(xyz,5);
			g.setColor(getColor(node.nodecolor.getColorId(5)));
			g.fillPolygon(xPoints, yPoints, 4);
			g.setColor(Color.BLACK);
			g.drawPolygon(xPoints, yPoints, 4);
		}
		
	}
	
	private int[] getxPoints(int[] xyz, int face){
		int[] xPoints = new int[4];
		switch(face){
		case 1:
			xPoints[0] = wspace + 2*xyz[0]*len;
			xPoints[1] = xPoints[0];
			xPoints[2] = xPoints[1] + 2*len;
			xPoints[3] = xPoints[2];
			xPoints[0] += space;
			xPoints[1] += space;
			break;
		case 2:
			xPoints[0] = wspace + xyz[1]*len + 6*len;
			xPoints[1] = xPoints[0];
			xPoints[2] = xPoints[1] + len;
			xPoints[3] = xPoints[2];
			xPoints[0] += space;
			xPoints[1] += space;
			break;
		case 5:
			xPoints[0] = wspace + (2*xyz[0] + xyz[1])*len;
			xPoints[1] = xPoints[0] + len;
			xPoints[3] = xPoints[1] + len;
			xPoints[2] = xPoints[3] + len;
			xPoints[0] += space;
			xPoints[1] += space/2;
			xPoints[2] -= space/2;
		}
		return xPoints;
	}
	
	private int[] getyPoints(int[] xyz, int face){
		int[] yPoints = new int[4];
		switch(face){
		case 1:
			yPoints[0] = hspace + 2*(3 - xyz[2])*len + 3*len;
			yPoints[1] = yPoints[0] - 2*len;
			yPoints[2] = yPoints[1];
			yPoints[3] = yPoints[0];
			yPoints[1] += space;
			yPoints[2] += space;
			break;
		case 2:
			yPoints[0] = hspace + 2*(3 - xyz[2])*len + (3-xyz[1])*len;
			yPoints[3] = yPoints[0] - len;
			yPoints[1] = yPoints[3] - len;
			yPoints[2] = yPoints[1] - len;
			yPoints[0] -= space;
			yPoints[1] += space/2;
			yPoints[2] += space + space/2;
			break;
		case 5:
			yPoints[0] = hspace + (3 - xyz[1])*len;
			yPoints[1] = yPoints[0] - len;
			yPoints[2] = yPoints[1];
			yPoints[3] = yPoints[0];
			yPoints[1] += space;
			yPoints[2] += space;
		}
		return yPoints;
	}
	
	private Color getColor(int colorId){
		switch(colorId){
		case 0:
			return Color.RED;
		case 1:
			return Color.BLUE;
		case 2:
			return Color.GREEN;
		case 3:
			return Color.YELLOW;
		case 4:
			return Color.PINK;
		default:
			return Color.WHITE;
		}
	}
}

1
0
分享到:
评论
2 楼 andyjojo 2009-02-13  
在这个帖子中
魔方Java程序
谢谢关注!
yuandaozheng520 写道

哥们MagicCube类也放上来

1 楼 yuandaozheng520 2009-02-12  
哥们MagicCube类也放上来

相关推荐

    LOGISTIC魔方图像加密

    logistic 图像加密 解密 matlab 魔方变换

    Android-MagicCubeb魔方图像识别颜色识别

    在Android应用中集成OpenCV,可以进行图像预处理,例如灰度化、直方图均衡化,以提高颜色识别的准确性。之后,可能需要使用色彩空间转换,比如从RGB转换到HSV,因为HSV色彩空间更利于颜色的判断。 颜色识别阶段,...

    C++实用图像处理(黑魔方)光盘文件--学习版Imgcx

    C++实用图像处理(黑魔方)光盘文件--学习版Imgcx,

    C++实用图像处理(黑魔方)光盘文件2

    《C++实用图像处理(黑魔方)》是一套专注于图像处理技术的资源包,主要针对C++编程语言。这个光盘文件2包含了用于学习和实践C++图像处理的资源,尽管描述中提到它是一个独立的部分,但可以与其他文件配合使用以获取...

    基于matlab和图像识别实现解魔方机器人源码图像识别魔方解算串口发送信息给stm32+代码注释.zip

    基于matlab和图像识别实现解魔方机器人源码图像识别魔方解算串口发送信息给stm32+代码注释.zip硬件机械平台:双臂双爪机械手,4个舵机,完成拧魔方的动作、USB 摄像头,完成魔方图像拍摄。 上位机程序 MATLAB 写的...

    Qt魔方还原lesson5-opencv识别颜色

    1. 图像捕获:使用Qt中的摄像头功能或读取已保存的魔方图片,获取魔方的图像输入。 2. 预处理:对图像进行预处理,包括灰度化、直方图均衡化、二值化等操作,以增强颜色边界并减少噪声。 3. 轮廓检测:利用OpenCV...

    stm32解魔方_stm32解魔方_stm32f407_魔方还原_魔方识别

    1. 图像预处理:采集到的图像可能受到光照、阴影等因素影响,需要通过灰度化、去噪、边缘检测等步骤改善图像质量,便于后续处理。 2. 魔方面识别:通过颜色分割技术,将魔方的六种颜色区分开来。这可能涉及到阈值...

    Python+OpenCV魔方识别系

    图像预处理:通过使用OpenCV提供的图像处理算法,对输入的魔方图像进行预处理,包括图像去噪、边缘检测、图像分割等操作,以提高后续的识别准确率。 特征提取与模式识别:通过使用OpenCV提供的特征提取算法,对...

    基于matlab和图像识别实现的解魔方机器人项目完整源码(完成图像识别-魔方解算-串口发送信息给stm32)+代码注释.zip

    基于matlab和图像识别实现的解魔方机器人项目完整源码(完成图像识别_魔方解算_串口发送信息给stm32)+代码注释+数据集+项目说明.zip 上位机程序 MATLAB 写的上位机,完成图像识别,魔方解算,通过串口发送机械运动...

    超级魔方秀

    本软件可以转出任意打乱的魔方,利用OpenGL显示三维魔方,其中在软件的开始界面中需要输入魔方的图像信息,首先在右上角的六个方格中输入魔方的六个面的颜色,然后利用鼠标右键点其中的一个颜色,拖动到中间的54个...

    魔方机器人技术文档

    在当今的科技时代,解魔方机器人作为一种机电一体化的智能设备,将魔方复原算法、计算机视觉和机器人控制技术融合在一起。这种机器人不仅可以展示人工智能的强大能力,也推动了相关技术的发展。文档中提到的解魔方...

    3D魔方_3D3阶魔方_

    在IT领域,3D魔方软件是利用计算机技术模拟真实三阶魔方的工具,它为用户提供了在电脑上体验和解决魔方的便捷途径。3D3阶魔方指的是具有三个维度,每一维度都有三层的魔方玩具,是魔方世界中最经典且最普及的一种...

    hei-mo-fang-code.rar_魔方_黑魔方

    【标题】"hei-mo-fang-code.rar"指的是一个压缩包文件,其中包含了与"魔方"相关的代码,特别是"黑魔方"的图像处理代码。"黑魔方"在这里可能是指一种特定的魔方软件或者算法,它涉及到图像处理技术在魔方领域的应用。...

    基于matlab和图像识别实现解魔方机器人源码图像识别魔方解算串口发送信息给stm32+代码注释(毕业设计)

    白平衡算法,用于修正图像色差 2. 单片机程序 STM32F103C8T6.zip 采用串口通信接收上位机的指令,用PWM波控制舵机,完成魔方的拧动。 3. 魔方样本图片 samples100.zip 费好大劲制作的100套实拍魔方图片,为颜色...

    魔方墙(源代码opencv实现)

    `findContours`函数可以帮助我们找到每个小魔方的轮廓,进而分离出每个小魔方的图像。 分离出小魔方后,我们可以对每个小魔方进行进一步处理,例如计算其中心点、旋转校正(如果需要)以及分析每个面的颜色。OpenCV...

    二阶魔方_cube_TheProgram_二阶魔方_

    综上所述,这个项目可能是一个使用Python编写的二阶魔方解决程序,它包含一个用户界面,可能通过图像(男.jpg和女.jpg)来呈现,而number_of_god.py文件是核心算法实现,负责找出解决魔方的最短路径。对于初学者或者...

Global site tag (gtag.js) - Google Analytics