魔方 3D 模型
一段時間,剛畢業的時候,想寫一個可以玩的魔方3D模型,隔了很久都沒有怎麼精力去寫,總以為這是要消耗挺多時間精力,去年一段時間,在週末時間還是難耐的想去實現自己的想法,最後用java swing寫了一個簡單的模型。
這邊就記錄下來。
當然現在已經是寫好了,完事後,只是放在硬碟上一直都沒有再去動,應為想安裝個linux系統,這邊準備格式化硬碟,就想著把他放到網上去,因為太懶,這邊只是附上簡單的東西。
當時的想法,整個模型的立體旋轉,子模組的旋轉,然後磁性粘合。
這邊通過點選來進行整體的模組和子模組旋轉的切換,旋轉是一直按住滑鼠左鍵滑動實現。
子模組的旋轉,先單擊整個模組,將滑鼠移動到制定要滑動的子模組,然後程式會根據你滑動的方向判斷要旋轉的子模組。
如果再單擊滑鼠,又切換到整個模組的旋轉,儘量可以人性化的去玩弄魔方:
最初的想法都是一樣的,建立子模組,組建成一個整體。
程式碼是java實現,main方法在test.java中。
程式碼下載:http://download.csdn.net/detail/qungxue/9661698
程式碼沒有分級,都是放在同一個包下面:
其中的思想是,一個魔方WholeCubeModel.java物件,有27塊小方塊(Cube.java)組成,LittleSquare.java就是小方塊組裝物件,每個小方塊又有6個面組成,沒個面抽象出來成SubFace.java,這邊Axis3D.java是控制元件座標點物件。RoateModel.java模型,主要是處理魔方的一些旋轉和自動磁性粘合操作,CubeComparator.java是一個比較器,為了魔方旋轉的時候旋轉的人性化和吻合人類視覺感官對畫出的模型組建進行排序。
這邊附上SubFace.java的程式碼:
package com.ake.magiccube;
import java.awt.Color;
import java.awt.Polygon;
/**
* just write one class that for sub cube, and this properties of
* cube contains for points and one color.
* if you want to ask me why this extends Polygon, it is just because
* I want to paint it on the panel.
* @author Administrator
*
*/
public class SubFace{
// define the face is exposing or not
private boolean isExpose;
//define the color
private Color color;
//add four point of this subface
private Axis3D[] points;
//set center point
private Axis3D center;
//add the polygon
private Polygon polygon;
//子立方塊的邊長大小
public static double size=100;
//標誌是否是內部面
private boolean isInside;
public boolean isInside() {
return isInside;
}
public void setInside(boolean isInside) {
this.isInside = isInside;
}
public SubFace(){
//set null color;
isExpose = true;
color = null;
polygon= new Polygon();
center = new Axis3D(0,0,0);
}
public Axis3D[] getPoints() {
return points;
}
public void setPoints(Axis3D[] points) {
this.points = points;
center.setValue((points[0].getX()+points[2].getX())/2,(points[0].getY()+points[2].getY())/2,(points[0].getZ()+points[2].getZ())/2);
this.flushPolygon();
}
public Polygon getPolygon() {
return polygon;
}
public void setPolygon(Polygon polygon) {
this.polygon = polygon;
}
public boolean isExpose() {
return isExpose;
}
public void setExpose(boolean isExpose) {
this.isExpose = isExpose;
}
public Color getColor() {
return color;
}
public void setColor(Color color) {
this.color = color;
}
//每次更新四個定點的座標時候,記得更新多邊形的資訊。
public void flushPolygon(){
//如果多邊形的長度大於4的話,我們就重置
if (polygon.npoints>=4) {
polygon.reset();
}
//新增多邊形的邊
for (int i = 0; i < points.length; i++) {
polygon.addPoint((int)points[i].getX(), (int)points[i].getY());
//System.out.println("Polygon flush:["+points[i].getX()+","+points[i].getY()+"]");
}
}
public Axis3D getCenter() {
// center.setValue((points[0].getX()+points[2].getX())/2,(points[0].getY()+points[2].getY())/2,(points[0].getZ()+points[2].getZ())/2);
return center;
}
public void setCenter(Axis3D center) {
this.center = center;
}
}
相關文章
- android 3d魔方 魔方復原 三維魔方 原始碼下載Android3D原始碼
- CSS3實現3D魔方效果CSSS33D
- CSS3 3d旋轉魔方效果CSSS33D
- 點點動畫~畫出懂你的3D魔方動畫3D
- 模型3D模型3D
- 解魔方機器人一秒搞定魔方機器人
- 魔方矩陣矩陣
- WebGL學習(3) - 3D模型Web3D模型
- 3D列印筆 畫出模型3D模型
- 3D遊戲角色模型建模| ZBrush製作3D獸人3D遊戲模型ZBrush
- WebGL 的 3D 模型交併補Web3D模型
- PIFuHD 讓照片秒變 3D 模型3D模型
- OpenGL 3D 模型載入和渲染3D模型
- three-gltf-viewer 3d模型展示View3D模型
- 18號3D列印模型分享3D模型
- C++12. 魔方陣C++
- 使用PolyGen和PyTorch生成3D模型PyTorch3D模型
- 關於建立3D線框模型的解答3D模型
- 基於SceneKit的3D模型觸碰事件3D模型事件
- three.js 製作魔方JS
- 用DirectX實現魔方(二)
- 魔方遊戲程式設計 (轉)遊戲程式設計
- AlloyTouch與three.js 3D模型互動JS3D模型
- 3D模型設計神器 Tridiv-CSS33D模型CSSS3
- 海賊女帝3D列印模型免費分享3D模型
- 華為3D建模服務(3D Modeling Kit),輕鬆構建高質量3D模型3D模型
- 魔方實時通訊im元件元件
- H5實現魔方遊戲H5遊戲
- CSS3 旋轉魔方效果CSSS3
- 魔方二階玩法[圖解]圖解
- 曲面建模3D模型設計Rhino 7中文3D模型
- 瀏覽器想IIS服務請求3D模型瀏覽器3D模型
- 地牢裡發生了什麼3D模型免費分享3D模型
- 碧藍航線-山城-貓娘3D列印模型免費分享3D模型
- 使用 SAP UI5 3D Viewer 控制元件顯示 3D 模型效果試讀版UI3DView控制元件模型
- 基礎架構之百變魔方架構
- CSS動畫之旋轉魔方輪播CSS動畫
- 視訊通話 - 時信魔方教程