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