三阶矩阵类,可用于二维图像处理和计算。
package Base;
//三阶矩阵类:
public class Matrix3 {
private float m[] = new float[9];
//构造函数:
public Matrix3() {
int i, j;
for (i = 0; i < 3; i++) {
for (j = 0; j < 3; j++) {
m[i * 3 + j] = i == j ? 1 : 0;
}
}
}
public Matrix3(float mat[]) {
int i;
for (i = 0; i < 9; i++) {
m[i] = mat[i];
}
}
public Matrix3(float mat[][]) {
int i, j;
for (i = 0; i < 3; i++) {
for (j = 0; j < 3; j++) {
m[i * 3 + j] = mat[i][j];
}
}
}
public Matrix3(Matrix3 mat) {
int i;
for (i = 0; i < 9; i++) {
m[i] = mat.m[i];
}
}
//加
public Matrix3 add(Matrix3 mat) {
int i;
Matrix3 s = new Matrix3();
for (i = 0; i < 9; i++) {
s.m[i] = m[i] + mat.m[i];
}
return s;
}
//减
public Matrix3 sub(Matrix3 mat) {
int i;
Matrix3 d = new Matrix3();
for (i = 0; i < 9; i++) {
d.m[i] = m[i] - mat.m[i];
}
return d;
}
//乘
public Matrix3 multi(Matrix3 mat) {
float s;
int i, j, k;
Matrix3 p = new Matrix3();
for (i = 0; i < 3; i++) {
for (j = 0; j < 3; j++) {
s = 0;
for (k = 0; k < 3; k++) {
s += m[i * 3 + k] * mat.m[k * 3 + j];
}
p.m[i * 3 + j] = s;
}
}
return p;
}
//行列式的值
public float delta() {
float d = 0;
d += m[0] * (m[4] * m[8] - m[5] * m[7]);
d -= m[3] * (m[1] * m[8] - m[2] * m[7]);
d += m[6] * (m[1] * m[5] - m[2] * m[4]);
return d;
}
//逆
public Matrix3 invert() {
Matrix3 v = new Matrix3();
float d = delta();
v.m[0] = (m[4] * m[8] - m[5] * m[7]) / d;
v.m[1] = (m[2] * m[7] - m[1] * m[8]) / d;
v.m[2] = (m[1] * m[5] - m[2] * m[4]) / d;
v.m[3] = (m[5] * m[6] - m[3] * m[8]) / d;
v.m[4] = (m[0] * m[8] - m[2] * m[6]) / d;
v.m[5] = (m[3] * m[2] - m[0] * m[5]) / d;
v.m[6] = (m[3] * m[7] - m[4] * m[6]) / d;
v.m[7] = (m[1] * m[6] - m[0] * m[7]) / d;
v.m[8] = (m[0] * m[4] - m[3] * m[1]) / d;
return v;
}
//转置
public Matrix3 transpose() {
int i, j;
Matrix3 t = new Matrix3();
for (i = 0; i < 3; i++) {
for (j = 0; j < 3; j++) {
t.m[i * 3 + j] = m[j * 3 + i];
}
}
return t;
}
//打印
public void print() {
int i, j;
for (i = 0; i < 3; i++) {
for (j = 0; j < 3; j++) {
System.out.format("%6.2f ", m[i * 3 + j]);
}
System.out.println();
}
System.out.println();
}
//随机阵
public void rand() {
int i;
for (i = 0; i < 9; i++) {
m[i] = (float) Math.random();
}
}
//测试代码:
public static void main(String[] args) {
Matrix3 m1 = new Matrix3();
Matrix3 m2 = new Matrix3();
m1.rand();
m2.rand();
m1.print();
m2.print();
Matrix3 m3 = m1.multi(m2).multi(m2.invert());
m3.print();
}
}