三阶矩阵类--java源码

三阶矩阵类,可用于二维图像处理和计算。

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();
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值