1 /* 2 * Copyright (C) 2009-2012 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package android.renderscript; 18 19 20 /** 21 * Class for exposing the native RenderScript rs_matrix2x2 type back to the Android system. 22 * 23 * @deprecated Renderscript has been deprecated in API level 31. Please refer to the <a 24 * href="https://developer.android.com/guide/topics/renderscript/migration-guide">migration 25 * guide</a> for the proposed alternatives. 26 **/ 27 @Deprecated 28 public class Matrix2f { 29 30 /** 31 * Creates a new identity 2x2 matrix 32 */ Matrix2f()33 public Matrix2f() { 34 mMat = new float[4]; 35 loadIdentity(); 36 } 37 38 /** 39 * Creates a new matrix and sets its values from the given 40 * parameter 41 * 42 * @param dataArray values to set the matrix to, must be 4 43 * floats long 44 */ Matrix2f(float[] dataArray)45 public Matrix2f(float[] dataArray) { 46 mMat = new float[4]; 47 System.arraycopy(dataArray, 0, mMat, 0, mMat.length); 48 } 49 50 /** 51 * Return a reference to the internal array representing matrix 52 * values. Modifying this array will also change the matrix 53 * 54 * @return internal array representing the matrix 55 */ getArray()56 public float[] getArray() { 57 return mMat; 58 } 59 60 /** 61 * Returns the value for a given row and column 62 * 63 * @param x column of the value to return 64 * @param y row of the value to return 65 * 66 * @return value in the yth row and xth column 67 */ get(int x, int y)68 public float get(int x, int y) { 69 return mMat[x*2 + y]; 70 } 71 72 /** 73 * Sets the value for a given row and column 74 * 75 * @param x column of the value to set 76 * @param y row of the value to set 77 */ set(int x, int y, float v)78 public void set(int x, int y, float v) { 79 mMat[x*2 + y] = v; 80 } 81 82 /** 83 * Sets the matrix values to identity 84 */ loadIdentity()85 public void loadIdentity() { 86 mMat[0] = 1; 87 mMat[1] = 0; 88 89 mMat[2] = 0; 90 mMat[3] = 1; 91 } 92 93 /** 94 * Sets the values of the matrix to those of the parameter 95 * 96 * @param src matrix to load the values from 97 */ load(Matrix2f src)98 public void load(Matrix2f src) { 99 System.arraycopy(src.getArray(), 0, mMat, 0, mMat.length); 100 } 101 102 /** 103 * Sets current values to be a rotation matrix of given angle 104 * 105 * @param rot rotation angle 106 */ loadRotate(float rot)107 public void loadRotate(float rot) { 108 float c, s; 109 rot *= (float)(java.lang.Math.PI / 180.0f); 110 c = (float)java.lang.Math.cos(rot); 111 s = (float)java.lang.Math.sin(rot); 112 mMat[0] = c; 113 mMat[1] = -s; 114 mMat[2] = s; 115 mMat[3] = c; 116 } 117 118 /** 119 * Sets current values to be a scale matrix of given dimensions 120 * 121 * @param x scale component x 122 * @param y scale component y 123 */ loadScale(float x, float y)124 public void loadScale(float x, float y) { 125 loadIdentity(); 126 mMat[0] = x; 127 mMat[3] = y; 128 } 129 130 /** 131 * Sets current values to be the result of multiplying two given 132 * matrices 133 * 134 * @param lhs left hand side matrix 135 * @param rhs right hand side matrix 136 */ loadMultiply(Matrix2f lhs, Matrix2f rhs)137 public void loadMultiply(Matrix2f lhs, Matrix2f rhs) { 138 for (int i=0 ; i<2 ; i++) { 139 float ri0 = 0; 140 float ri1 = 0; 141 for (int j=0 ; j<2 ; j++) { 142 float rhs_ij = rhs.get(i,j); 143 ri0 += lhs.get(j,0) * rhs_ij; 144 ri1 += lhs.get(j,1) * rhs_ij; 145 } 146 set(i,0, ri0); 147 set(i,1, ri1); 148 } 149 } 150 151 /** 152 * Post-multiplies the current matrix by a given parameter 153 * 154 * @param rhs right hand side to multiply by 155 */ multiply(Matrix2f rhs)156 public void multiply(Matrix2f rhs) { 157 Matrix2f tmp = new Matrix2f(); 158 tmp.loadMultiply(this, rhs); 159 load(tmp); 160 } 161 /** 162 * Modifies the current matrix by post-multiplying it with a 163 * rotation matrix of given angle 164 * 165 * @param rot angle of rotation 166 */ rotate(float rot)167 public void rotate(float rot) { 168 Matrix2f tmp = new Matrix2f(); 169 tmp.loadRotate(rot); 170 multiply(tmp); 171 } 172 /** 173 * Modifies the current matrix by post-multiplying it with a 174 * scale matrix of given dimensions 175 * 176 * @param x scale component x 177 * @param y scale component y 178 */ scale(float x, float y)179 public void scale(float x, float y) { 180 Matrix2f tmp = new Matrix2f(); 181 tmp.loadScale(x, y); 182 multiply(tmp); 183 } 184 /** 185 * Sets the current matrix to its transpose 186 */ transpose()187 public void transpose() { 188 float temp = mMat[1]; 189 mMat[1] = mMat[2]; 190 mMat[2] = temp; 191 } 192 193 final float[] mMat; 194 } 195 196 197 198