📄 matrix3d.java
字号:
package myprojects.graph3dapp;
class Matrix3d {
public double matrix[][] = new double[][] {
new double[] {0, 0, 0, 0},
new double[] {0, 0, 0, 0},
new double[] {0, 0, 0, 0},
new double[] {0, 0, 0, 0}
};
public Matrix3d() {
}
public Matrix3d(double matrix[][]) {
for(int i=0; i<4; i++) {
for(int j=0; j<4; j++) this.matrix[i][j] = matrix[i][j];
}
}
public Matrix3d(Matrix3d m) {
for(int i=0; i<4; i++) {
for(int j=0; j<4; j++) this.matrix[i][j] = m.matrix[i][j];
}
}
public Matrix3d(double m00, double m01, double m02, double m03,
double m10, double m11, double m12, double m13,
double m20, double m21, double m22, double m23,
double m30, double m31, double m32, double m33) {
matrix[0][0] = m00; matrix[0][1] = m01;
matrix[0][2] = m02; matrix[0][3] = m03;
matrix[1][0] = m10; matrix[1][1] = m11;
matrix[1][2] = m12; matrix[1][3] = m13;
matrix[2][0] = m20; matrix[2][1] = m21;
matrix[2][2] = m22; matrix[2][3] = m23;
matrix[3][0] = m30; matrix[3][1] = m31;
matrix[3][2] = m32; matrix[3][3] = m33;
}
public static Matrix3d unit() {
Matrix3d m = new Matrix3d();
m.matrix[0][0] = m.matrix[1][1] = m.matrix[2][2] = m.matrix[3][3] = 1;
return m;
}
public static Matrix3d zero() {
return new Matrix3d();
}
public static Matrix3d translate(double x, double y, double z) {
Matrix3d m = unit();
m.matrix[3][0] = x;
m.matrix[3][1] = y;
m.matrix[3][2] = z;
return m;
}
public static Matrix3d rotateX(double af) {
Matrix3d m = unit();
m.matrix[1][1] = (double)Math.cos(af);
m.matrix[1][2] = (double)Math.sin(af);
m.matrix[2][1] = -(double)Math.sin(af);
m.matrix[2][2] = (double)Math.cos(af);
return m;
}
public static Matrix3d rotateY(double af) {
Matrix3d m = unit();
m.matrix[0][0] = (double)Math.cos(af);
m.matrix[0][2] = -(double)Math.sin(af);
m.matrix[2][0] = (double)Math.sin(af);
m.matrix[2][2] = (double)Math.cos(af);
return m;
}
public static Matrix3d rotateZ(double af) {
Matrix3d m = unit();
m.matrix[0][0] = (double)Math.cos(af);
m.matrix[0][1] = (double)Math.sin(af);
m.matrix[1][0] = -(double)Math.sin(af);
m.matrix[1][1] = (double)Math.cos(af);
return m;
}
public static Matrix3d scale(double x, double y, double z) {
Matrix3d m = new Matrix3d();
m.matrix[0][0] = x;
m.matrix[1][1] = y;
m.matrix[2][2] = z;
m.matrix[3][3] = 1;
return m;
}
public void add(Matrix3d m) {
for(int i=0; i<4; i++) {
for(int j=0; j<4; j++) this.matrix[i][j] += m.matrix[i][j];
}
}
public static Matrix3d add(Matrix3d m0, Matrix3d m1) {
Matrix3d m = new Matrix3d();
for(int i=0; i<4; i++) {
for(int j=0; j<4; j++) m.matrix[i][j] = m0.matrix[i][j]+m1.matrix[i][j];
}
return m;
}
public void sub(Matrix3d m) {
for(int i=0; i<4; i++) {
for(int j=0; j<4; j++) this.matrix[i][j] -= m.matrix[i][j];
}
}
public static Matrix3d sub(Matrix3d m0, Matrix3d m1) {
Matrix3d m = new Matrix3d();
for(int i=0; i<4; i++) {
for(int j=0; j<4; j++) m.matrix[i][j] = m0.matrix[i][j]-m1.matrix[i][j];
}
return m;
}
public void mul(Matrix3d m) {
Matrix3d tmp = new Matrix3d(this);
for(int i=0; i<4; i++) {
for(int j=0; j<4; j++) {
matrix[i][j] = 0;
for(int k=0; k<4; k++) matrix[i][j] += tmp.matrix[i][k]*m.matrix[k][j];
}
}
}
public static Matrix3d mul(Matrix3d m0, Matrix3d m1) {
Matrix3d m = new Matrix3d();
for(int i=0; i<4; i++) {
for(int j=0; j<4; j++) {
m.matrix[i][j] = 0;
for(int k=0; k<4; k++) m.matrix[i][j] += m0.matrix[i][k]*m1.matrix[k][j];
}
}
return m;
}
public String toString() {
return String.valueOf(matrix[0][0]) + ", "+String.valueOf(matrix[0][1]) +", " +
String.valueOf(matrix[0][2]) + ", "+String.valueOf(matrix[0][3]) +", \n" +
String.valueOf(matrix[1][0]) + ", "+String.valueOf(matrix[1][1]) +", " +
String.valueOf(matrix[1][2]) + ", "+String.valueOf(matrix[1][3]) +", \n" +
String.valueOf(matrix[2][0]) + ", "+String.valueOf(matrix[2][1]) +", " +
String.valueOf(matrix[2][2]) + ", "+String.valueOf(matrix[2][3]) +", \n" +
String.valueOf(matrix[3][0]) + ", "+String.valueOf(matrix[3][1]) +", " +
String.valueOf(matrix[3][2]) + ", "+String.valueOf(matrix[3][3]);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -