我从几个小时以来一直坐在我的立方体教室里。我想创造一个可转换的立方体。为此,我需要点和线,我可以转换与矩阵乘法。
因此,首先我声明我的数组,然后用值构造它们。我要用括号符号吗?我的错误在哪里?
然后,我实现了setter函数来更改数组,并实现了一个转换函数,它为转换后的顶点生成一个新的数组。你将如何正确地实现它?有什么建议吗?
class Cube {
private Vertex[] vertArray = new Vertex[8];
// create 8 vertexes for cube
vertArray[0] = new Vertex(50.0, 50.0, 0.0, 1.0);
vertArray[1] = new Vertex(150.0, 50.0, 0.0, 1.0);
vertArray[2] = new Vertex(150.0, 150.0, 0.0, 1.0);
vertArray[3] = new Vertex(50.0, 150.0, 0.0, 1.0);
vertArray[4] = new Vertex(50.0, 50.0, -100.0, 1.0);
vertArray[5] = new Vertex(150.0, 50.0, -100.0, 1.0);
vertArray[6] = new Vertex(150.0, 150.0, -100.0, 1.0);
vertArray[7] = new Vertex(50.0, 150.0, -100.0, 1.0);
private Line[] lineArray = new Line[12];
// 12 lines out of 8 vertexes
// clockwise arrangement from top left, first front then back
lineArray[0] = new Line(vertArray[0], vertArray[1]);
lineArray[1] = new Line(vertArray[1], vertArray[2]);
lineArray[2] = new Line(vertArray[2], vertArray[3]);
lineArray[3] = new Line(vertArray[3], vertArray[0]);
lineArray[4] = new Line(vertArray[0], vertArray[4]);
lineArray[5] = new Line(vertArray[1], vertArray[5]);
lineArray[6] = new Line(vertArray[2], vertArray[6]);
lineArray[7] = new Line(vertArray[3], vertArray[7]);
lineArray[8] = new Line(vertArray[4], vertArray[5]);
lineArray[9] = new Line(vertArray[5], vertArray[6]);
lineArray[10] = new Line(vertArray[6], vertArray[7]);
lineArray[11] = new Line(vertArray[7], vertArray[4]);
private Float[][] transfArray;
private Vertex[] newVertArray;
Cube() {
this.setVertArray(this.vertArray);
this.setLineArray(this.lineArray);
}
void setVertArray(Float vertArray[]) {
this.vertArray = vertArray;
}
void setLineArray(Float lineArray[]) {
this.lineArray = lineArray;
}
void setTransfArray(Float[][] transfArray) {
this.transfArray = transfArray;
}
void display() {
for (int i=0; i<lineArray.length; i++) {
lineArray[i].display();
}
}
void transform() {
// new vertex-array for transformed vertexes
newVertArray = new Vertex[vertArray.length];
// count rows of transformation matrix
int transfColumns = this.transfArray[0].length;
// check if matrix-multiplication is possible
if (transfColumns != 4) {
println("transformation Array " + transfColumns + " did not match homogenous coordinate.");
}
for (int h=0; h<vertArray.length; h++) {
// iterate through vertArray
// return new vertArray
Float[] newCoordinateArray = new Float[4];
for (int i=0; i<4; i++) {
// iterate through each row of transfArray
// return new Vertex
float newCoordinate = 0.0;
for (int j=0; j<4; j++) {
// iterate through each value of transfArray-Row
// and multiply with Vertex, add to newCoordinate
newCoordinate += (transfArray[i][0] * vertArray[h].x);
newCoordinate += (transfArray[i][1] * vertArray[h].y);
newCoordinate += (transfArray[i][2] * vertArray[h].z);
newCoordinate += (transfArray[i][3] * vertArray[h].t);
}
newCoordinateArray[i] = newCoordinate;
//print("newCoordinate = " + newCoordinate);
}
// asign values of newCoordinateArray to x, y, z or t
Vertex newVertex = new Vertex(
newCoordinateArray[0], // assign to x
newCoordinateArray[1], // assign to y
newCoordinateArray[2], // assign to z
newCoordinateArray[3] // assign to t
);
print(" newVertex = " + newVertex.x + " " +
newVertex.y + " " + newVertex.z + " " + newVertex.t);
newVertArray[h] = newVertex;
}
//print("newVertArray = " + newVertArray);
}
}Eclipse和ProcessingIDE都抱怨数组的构造。其他一切都在建造中。提前感谢!
发布于 2014-03-20 14:01:11
将像vertArray[0] = new Vertex(50.0, 50.0, 0.0, 1.0);这样的行放入构造函数中。
或者,以这种方式对vertArray进行非关税化:
// create 8 vertexes for cube
private Vertex[] vertArray = new Vertex[8] {
new Vertex(50.0, 50.0, 0.0, 1.0),
new Vertex(150.0, 50.0, 0.0, 1.0),
new Vertex(150.0, 150.0, 0.0, 1.0),
new Vertex(50.0, 150.0, 0.0, 1.0),
new Vertex(50.0, 50.0, -100.0, 1.0),
new Vertex(150.0, 50.0, -100.0, 1.0),
new Vertex(150.0, 150.0, -100.0, 1.0),
new Vertex(50.0, 150.0, -100.0, 1.0)
};https://stackoverflow.com/questions/22534725
复制相似问题