Matrix2f.java revision cf9a44cdf3647c8b31499ad6250f63259c0e34e2
125430d0734d12d12ca2d2d7a9d18c0cf3c5bdc4eJason Sams/*
225430d0734d12d12ca2d2d7a9d18c0cf3c5bdc4eJason Sams * Copyright (C) 2009 The Android Open Source Project
325430d0734d12d12ca2d2d7a9d18c0cf3c5bdc4eJason Sams *
425430d0734d12d12ca2d2d7a9d18c0cf3c5bdc4eJason Sams * Licensed under the Apache License, Version 2.0 (the "License");
525430d0734d12d12ca2d2d7a9d18c0cf3c5bdc4eJason Sams * you may not use this file except in compliance with the License.
625430d0734d12d12ca2d2d7a9d18c0cf3c5bdc4eJason Sams * You may obtain a copy of the License at
725430d0734d12d12ca2d2d7a9d18c0cf3c5bdc4eJason Sams *
825430d0734d12d12ca2d2d7a9d18c0cf3c5bdc4eJason Sams *      http://www.apache.org/licenses/LICENSE-2.0
925430d0734d12d12ca2d2d7a9d18c0cf3c5bdc4eJason Sams *
1025430d0734d12d12ca2d2d7a9d18c0cf3c5bdc4eJason Sams * Unless required by applicable law or agreed to in writing, software
1125430d0734d12d12ca2d2d7a9d18c0cf3c5bdc4eJason Sams * distributed under the License is distributed on an "AS IS" BASIS,
1225430d0734d12d12ca2d2d7a9d18c0cf3c5bdc4eJason Sams * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1325430d0734d12d12ca2d2d7a9d18c0cf3c5bdc4eJason Sams * See the License for the specific language governing permissions and
1425430d0734d12d12ca2d2d7a9d18c0cf3c5bdc4eJason Sams * limitations under the License.
1525430d0734d12d12ca2d2d7a9d18c0cf3c5bdc4eJason Sams */
1625430d0734d12d12ca2d2d7a9d18c0cf3c5bdc4eJason Sams
1725430d0734d12d12ca2d2d7a9d18c0cf3c5bdc4eJason Samspackage android.renderscript;
1825430d0734d12d12ca2d2d7a9d18c0cf3c5bdc4eJason Sams
1925430d0734d12d12ca2d2d7a9d18c0cf3c5bdc4eJason Samsimport java.lang.Math;
2025430d0734d12d12ca2d2d7a9d18c0cf3c5bdc4eJason Samsimport android.util.Log;
2125430d0734d12d12ca2d2d7a9d18c0cf3c5bdc4eJason Sams
2225430d0734d12d12ca2d2d7a9d18c0cf3c5bdc4eJason Sams
2325430d0734d12d12ca2d2d7a9d18c0cf3c5bdc4eJason Sams/**
2425430d0734d12d12ca2d2d7a9d18c0cf3c5bdc4eJason Sams * @hide
2525430d0734d12d12ca2d2d7a9d18c0cf3c5bdc4eJason Sams *
2625430d0734d12d12ca2d2d7a9d18c0cf3c5bdc4eJason Sams **/
2725430d0734d12d12ca2d2d7a9d18c0cf3c5bdc4eJason Samspublic class Matrix2f {
2825430d0734d12d12ca2d2d7a9d18c0cf3c5bdc4eJason Sams
2925430d0734d12d12ca2d2d7a9d18c0cf3c5bdc4eJason Sams    public Matrix2f() {
3025430d0734d12d12ca2d2d7a9d18c0cf3c5bdc4eJason Sams        mMat = new float[4];
3125430d0734d12d12ca2d2d7a9d18c0cf3c5bdc4eJason Sams        loadIdentity();
3225430d0734d12d12ca2d2d7a9d18c0cf3c5bdc4eJason Sams    }
3325430d0734d12d12ca2d2d7a9d18c0cf3c5bdc4eJason Sams
3425430d0734d12d12ca2d2d7a9d18c0cf3c5bdc4eJason Sams    public float get(int i, int j) {
3525430d0734d12d12ca2d2d7a9d18c0cf3c5bdc4eJason Sams        return mMat[i*2 + j];
3625430d0734d12d12ca2d2d7a9d18c0cf3c5bdc4eJason Sams    }
3725430d0734d12d12ca2d2d7a9d18c0cf3c5bdc4eJason Sams
3825430d0734d12d12ca2d2d7a9d18c0cf3c5bdc4eJason Sams    public void set(int i, int j, float v) {
3925430d0734d12d12ca2d2d7a9d18c0cf3c5bdc4eJason Sams        mMat[i*2 + j] = v;
4025430d0734d12d12ca2d2d7a9d18c0cf3c5bdc4eJason Sams    }
4125430d0734d12d12ca2d2d7a9d18c0cf3c5bdc4eJason Sams
4225430d0734d12d12ca2d2d7a9d18c0cf3c5bdc4eJason Sams    public void loadIdentity() {
4325430d0734d12d12ca2d2d7a9d18c0cf3c5bdc4eJason Sams        mMat[0] = 1;
4425430d0734d12d12ca2d2d7a9d18c0cf3c5bdc4eJason Sams        mMat[1] = 0;
4525430d0734d12d12ca2d2d7a9d18c0cf3c5bdc4eJason Sams
4625430d0734d12d12ca2d2d7a9d18c0cf3c5bdc4eJason Sams        mMat[2] = 0;
4725430d0734d12d12ca2d2d7a9d18c0cf3c5bdc4eJason Sams        mMat[3] = 1;
4825430d0734d12d12ca2d2d7a9d18c0cf3c5bdc4eJason Sams    }
4925430d0734d12d12ca2d2d7a9d18c0cf3c5bdc4eJason Sams
5025430d0734d12d12ca2d2d7a9d18c0cf3c5bdc4eJason Sams    public void load(Matrix2f src) {
5125430d0734d12d12ca2d2d7a9d18c0cf3c5bdc4eJason Sams        System.arraycopy(mMat, 0, src, 0, 4);
5225430d0734d12d12ca2d2d7a9d18c0cf3c5bdc4eJason Sams    }
5325430d0734d12d12ca2d2d7a9d18c0cf3c5bdc4eJason Sams
54cf9a44cdf3647c8b31499ad6250f63259c0e34e2Alex Sakhartchouk    public void loadRotate(float rot) {
55cf9a44cdf3647c8b31499ad6250f63259c0e34e2Alex Sakhartchouk        float c, s;
56cf9a44cdf3647c8b31499ad6250f63259c0e34e2Alex Sakhartchouk        rot *= (float)(java.lang.Math.PI / 180.0f);
57cf9a44cdf3647c8b31499ad6250f63259c0e34e2Alex Sakhartchouk        c = (float)java.lang.Math.cos(rot);
58cf9a44cdf3647c8b31499ad6250f63259c0e34e2Alex Sakhartchouk        s = (float)java.lang.Math.sin(rot);
59cf9a44cdf3647c8b31499ad6250f63259c0e34e2Alex Sakhartchouk        mMat[0] = c;
60cf9a44cdf3647c8b31499ad6250f63259c0e34e2Alex Sakhartchouk        mMat[1] = -s;
61cf9a44cdf3647c8b31499ad6250f63259c0e34e2Alex Sakhartchouk        mMat[2] = s;
62cf9a44cdf3647c8b31499ad6250f63259c0e34e2Alex Sakhartchouk        mMat[3] = c;
63cf9a44cdf3647c8b31499ad6250f63259c0e34e2Alex Sakhartchouk    }
64cf9a44cdf3647c8b31499ad6250f63259c0e34e2Alex Sakhartchouk
65cf9a44cdf3647c8b31499ad6250f63259c0e34e2Alex Sakhartchouk    public void loadScale(float x, float y) {
66cf9a44cdf3647c8b31499ad6250f63259c0e34e2Alex Sakhartchouk        loadIdentity();
67cf9a44cdf3647c8b31499ad6250f63259c0e34e2Alex Sakhartchouk        mMat[0] = x;
68cf9a44cdf3647c8b31499ad6250f63259c0e34e2Alex Sakhartchouk        mMat[3] = y;
69cf9a44cdf3647c8b31499ad6250f63259c0e34e2Alex Sakhartchouk    }
70cf9a44cdf3647c8b31499ad6250f63259c0e34e2Alex Sakhartchouk    public void loadMultiply(Matrix2f lhs, Matrix2f rhs) {
71cf9a44cdf3647c8b31499ad6250f63259c0e34e2Alex Sakhartchouk        for (int i=0 ; i<2 ; i++) {
72cf9a44cdf3647c8b31499ad6250f63259c0e34e2Alex Sakhartchouk            float ri0 = 0;
73cf9a44cdf3647c8b31499ad6250f63259c0e34e2Alex Sakhartchouk            float ri1 = 0;
74cf9a44cdf3647c8b31499ad6250f63259c0e34e2Alex Sakhartchouk            for (int j=0 ; j<2 ; j++) {
75cf9a44cdf3647c8b31499ad6250f63259c0e34e2Alex Sakhartchouk                float rhs_ij = rhs.get(i,j);
76cf9a44cdf3647c8b31499ad6250f63259c0e34e2Alex Sakhartchouk                ri0 += lhs.get(j,0) * rhs_ij;
77cf9a44cdf3647c8b31499ad6250f63259c0e34e2Alex Sakhartchouk                ri1 += lhs.get(j,1) * rhs_ij;
78cf9a44cdf3647c8b31499ad6250f63259c0e34e2Alex Sakhartchouk            }
79cf9a44cdf3647c8b31499ad6250f63259c0e34e2Alex Sakhartchouk            set(i,0, ri0);
80cf9a44cdf3647c8b31499ad6250f63259c0e34e2Alex Sakhartchouk            set(i,1, ri1);
81cf9a44cdf3647c8b31499ad6250f63259c0e34e2Alex Sakhartchouk        }
82cf9a44cdf3647c8b31499ad6250f63259c0e34e2Alex Sakhartchouk    }
83cf9a44cdf3647c8b31499ad6250f63259c0e34e2Alex Sakhartchouk
84cf9a44cdf3647c8b31499ad6250f63259c0e34e2Alex Sakhartchouk    public void multiply(Matrix2f rhs) {
85cf9a44cdf3647c8b31499ad6250f63259c0e34e2Alex Sakhartchouk        Matrix2f tmp = new Matrix2f();
86cf9a44cdf3647c8b31499ad6250f63259c0e34e2Alex Sakhartchouk        tmp.loadMultiply(this, rhs);
87cf9a44cdf3647c8b31499ad6250f63259c0e34e2Alex Sakhartchouk        load(tmp);
88cf9a44cdf3647c8b31499ad6250f63259c0e34e2Alex Sakhartchouk    }
89cf9a44cdf3647c8b31499ad6250f63259c0e34e2Alex Sakhartchouk    public void rotate(float rot) {
90cf9a44cdf3647c8b31499ad6250f63259c0e34e2Alex Sakhartchouk        Matrix2f tmp = new Matrix2f();
91cf9a44cdf3647c8b31499ad6250f63259c0e34e2Alex Sakhartchouk        tmp.loadRotate(rot);
92cf9a44cdf3647c8b31499ad6250f63259c0e34e2Alex Sakhartchouk        multiply(tmp);
93cf9a44cdf3647c8b31499ad6250f63259c0e34e2Alex Sakhartchouk    }
94cf9a44cdf3647c8b31499ad6250f63259c0e34e2Alex Sakhartchouk    public void scale(float x, float y) {
95cf9a44cdf3647c8b31499ad6250f63259c0e34e2Alex Sakhartchouk        Matrix2f tmp = new Matrix2f();
96cf9a44cdf3647c8b31499ad6250f63259c0e34e2Alex Sakhartchouk        tmp.loadScale(x, y);
97cf9a44cdf3647c8b31499ad6250f63259c0e34e2Alex Sakhartchouk        multiply(tmp);
98cf9a44cdf3647c8b31499ad6250f63259c0e34e2Alex Sakhartchouk    }
99cf9a44cdf3647c8b31499ad6250f63259c0e34e2Alex Sakhartchouk
10025430d0734d12d12ca2d2d7a9d18c0cf3c5bdc4eJason Sams    final float[] mMat;
10125430d0734d12d12ca2d2d7a9d18c0cf3c5bdc4eJason Sams}
10225430d0734d12d12ca2d2d7a9d18c0cf3c5bdc4eJason Sams
10325430d0734d12d12ca2d2d7a9d18c0cf3c5bdc4eJason Sams
10425430d0734d12d12ca2d2d7a9d18c0cf3c5bdc4eJason Sams
105