ルービックキューブ I - 1

ずいぶん間が空いてしまいました。

既存のコードを作り直す過程で、書き換える予定のなかった部分に潜在的なバグが見つかったり、また15パズルを含めて以前は無視していたメモリ管理を多少はまともにしようと考えてはまり込んだり、ずるずると遅れてしまいました。
ようやくコードが安定してきたので、これから数回にわたって<ルービックキューブ I>としてコードを紹介していきたいと思います。

ルービックキューブ I>には、ブロックを9つづつスライスして動かすルーチンは組み込まれていません。初期状態の27個のブロック全体をぐりぐりと回転させることができるだけです。<ルービックキューブ II>ではスライスを実装したいと思います。

さて、まず今回作成する7つのクラスについて簡単に説明しておきます。

◇Point3dクラス
 これは三次元の点を表すクラスです。
 NSObjectのsubclassです。

◇Quad3dクラス
 Point3d4個で三次元の面を表すクラスです。
 NSObjectのsubclassです。

◇Cubeクラス
 Quad3d6個で立方体を表すクラスです。ルービックキューブの一つ一つのブロックを表しています。
 NSObjectのsubclassです。
 このCubeクラスでは図形の三次元変換操作のために<QuartzCore.framework>の<QuartzCore/CATransform3D.h>をimportしています。

◇RubicCubeクラス
 Cube27個で、ルービックキューブ全体を表すクラスです。
 NSObjectのsubclassです。

◇MyWorldクラス
 RubicCubeを描画するビューです。
 これだけがUIViewのsubclassです。

ここまでが基本的な図形を表現しているクラスで、後の2つは図形の演算のための補助的なクラスです。

◇Ctm3dクラス
 ローカルな座標をワールド座標系へ、ワールド座標系をビュー座標系へ変換するための三次元変換行列(CTM)を保存するクラスです。
 NSObjectのsubclassです。
 Cubeクラスと同じく、<QuartzCore.framework>の<QuartzCore/CATransform3D.h>をimportしています。

◇FlatEquationクラス
 図形の前後関係を調べるために使う平面の方程式を表すクラスです。
 NSObjectのsubclassです。

クラスは以上です。
 
projectは、15パズルと同じView-based Applicationを使用しています。

開発環境についても書いておきます。
マシンはMacBook(Early 2009) MB881J/A、本日Mac OS X 10.6 Snow Leopardにアップグレードしました。XCodeSnow Leopard付属の3.2、iPhone SDKもそれに合わせて3.0(Snow Leopard)にしました。

では、次回よりクラスの説明に入ります。