コンソールで「3D」キューブを作成して回転させる(サイコロロールスタイル)ための優れたアルゴリズムは何ですか?
創造的な答えをいただければ幸いです。
これがあなたが探している「アルゴリズム」として適格かどうかはわかりませんが、いつでも完全な3D計算を行うことができます。
キューブワイヤフレームを描画するためのサンプルコード(OpenTKのVector / Matrixクラスを使用していますが、XNAまたは他のライブラリからも取得できます)
using System;
using System.Linq;
using OpenTK;
class Cubes
{
static void Main() {
var resolution = 25;
var points = from i in Enumerable.Range(1, 8) select new Vector3(i / 4 % 2 * 2 - 1, i / 2 % 2 * 2 - 1, i % 2 * 2 - 1);
var lines = from a in points
from b in points
where (a - b).Length == 2 // adjacent points
&& a.X + a.Y + a.Z > b.X + b.Y + b.Z // select each pair once
select new { a, b };
var t = 0f;
while (true) {
t += .1f;
var projection = Matrix4.CreatePerspectiveFieldOfView(.8f, 1, .01f, 100f);
var view = Matrix4.LookAt(2 * new Vector3((float)Math.Sin(t), .5f, (float)Math.Cos(t)), Vector3.Zero, Vector3.UnitY);
Console.Clear();
foreach (var line in lines) {
for (int i = 0; i < resolution; i++) {
var point = (1f / resolution) * (i * line.a + (resolution - 1 - i) * line.b); // interpolate a point between the two corners
var p1 = 5 * Vector3.Transform(point, view * projection) + new Vector3(30, 20, 0);
Console.SetCursorPosition((int)p1.X, (int)p1.Y);
Console.Write("#");
}
}
Console.ReadKey();
}
}
}
出力からのサンプルフレーム:
#
######
#######
#######
#######
######
######
######
######
#######
########
########
### ######
### ####
########
####
####
####
####
####
####
## ######
#### ###
###### ###
########
########
#######
######
######
######
######
### ####
### ####
### ####
######
#
#
######
######
######
### ####
### ####
#####
######
## ###
######
#########
########
##### ###
###### ###
## #####
####
####
####
####
####
####
#######
### ######
### #####
### #####
#### #####
######
#####
######
#####
#######
#######
######
######
######
#
#
##############
###########
####
####
### ###
####
####
######
####
#####
############## ##
## ###########
####
####
####
####
####
####
####
####
#############
## ##############
#####
####
######
####
####
### ###
####
####
###########
##############
#
良い「3Dキューブアスキーアートアルゴリズム」はないと思います。デザイン時または実行時に作成できる3Dキューブアニメーションを使用し、通常のASCIIアートジェネレーターを使用します。
キューブを停止するまで、キューブの3DASCIIアニメーションを生成する文字の配列を表示するwhileループを作成できます。foreach (char spinCube in spinCubeTest)それに応じて文字を移動するようなものを使用してください。