1 /* 2 * Copyright (C) 2013 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 * Vector version of the basic float type. 21 * Provides two float fields packed. 22 */ 23 public class Float2 { 24 public float x; 25 public float y; 26 27 public Float2() { 28 } 29 /** @hide */ 30 public Float2(Float2 data) { 31 this.x = data.x; 32 this.y = data.y; 33 } 34 35 public Float2(float x, float y) { 36 this.x = x; 37 this.y = y; 38 } 39 40 /** @hide 41 * Vector add 42 * 43 * @param a 44 * @param b 45 * @return 46 */ 47 public static Float2 add(Float2 a, Float2 b) { 48 Float2 res = new Float2(); 49 res.x = a.x + b.x; 50 res.y = a.y + b.y; 51 52 return res; 53 } 54 55 /** @hide 56 * Vector add 57 * 58 * @param value 59 */ 60 public void add(Float2 value) { 61 x += value.x; 62 y += value.y; 63 } 64 65 /** @hide 66 * Vector add 67 * 68 * @param value 69 */ 70 public void add(float value) { 71 x += value; 72 y += value; 73 } 74 75 /** @hide 76 * Vector add 77 * 78 * @param a 79 * @param b 80 * @return 81 */ 82 public static Float2 add(Float2 a, float b) { 83 Float2 res = new Float2(); 84 res.x = a.x + b; 85 res.y = a.y + b; 86 87 return res; 88 } 89 90 /** @hide 91 * Vector subtraction 92 * 93 * @param value 94 */ 95 public void sub(Float2 value) { 96 x -= value.x; 97 y -= value.y; 98 } 99 100 /** @hide 101 * Vector subtraction 102 * 103 * @param a 104 * @param b 105 * @return 106 */ 107 public static Float2 sub(Float2 a, Float2 b) { 108 Float2 res = new Float2(); 109 res.x = a.x - b.x; 110 res.y = a.y - b.y; 111 112 return res; 113 } 114 115 /** @hide 116 * Vector subtraction 117 * 118 * @param value 119 */ 120 public void sub(float value) { 121 x -= value; 122 y -= value; 123 } 124 125 /** @hide 126 * Vector subtraction 127 * 128 * @param a 129 * @param b 130 * @return 131 */ 132 public static Float2 sub(Float2 a, float b) { 133 Float2 res = new Float2(); 134 res.x = a.x - b; 135 res.y = a.y - b; 136 137 return res; 138 } 139 140 /** @hide 141 * Vector multiplication 142 * 143 * @param value 144 */ 145 public void mul(Float2 value) { 146 x *= value.x; 147 y *= value.y; 148 } 149 150 /** @hide 151 * Vector multiplication 152 * 153 * @param a 154 * @param b 155 * @return 156 */ 157 public static Float2 mul(Float2 a, Float2 b) { 158 Float2 res = new Float2(); 159 res.x = a.x * b.x; 160 res.y = a.y * b.y; 161 162 return res; 163 } 164 165 /** @hide 166 * Vector multiplication 167 * 168 * @param value 169 */ 170 public void mul(float value) { 171 x *= value; 172 y *= value; 173 } 174 175 /** @hide 176 * Vector multiplication 177 * 178 * @param a 179 * @param b 180 * @return 181 */ 182 public static Float2 mul(Float2 a, float b) { 183 Float2 res = new Float2(); 184 res.x = a.x * b; 185 res.y = a.y * b; 186 187 return res; 188 } 189 190 /** @hide 191 * Vector division 192 * 193 * @param value 194 */ 195 public void div(Float2 value) { 196 x /= value.x; 197 y /= value.y; 198 } 199 200 /** @hide 201 * Vector division 202 * 203 * @param a 204 * @param b 205 * @return 206 */ 207 public static Float2 div(Float2 a, Float2 b) { 208 Float2 res = new Float2(); 209 res.x = a.x / b.x; 210 res.y = a.y / b.y; 211 212 return res; 213 } 214 215 /** @hide 216 * Vector division 217 * 218 * @param value 219 */ 220 public void div(float value) { 221 x /= value; 222 y /= value; 223 } 224 225 /** @hide 226 * Vector division 227 * 228 * @param a 229 * @param b 230 * @return 231 */ 232 public static Float2 div(Float2 a, float b) { 233 Float2 res = new Float2(); 234 res.x = a.x / b; 235 res.y = a.y / b; 236 237 return res; 238 } 239 240 /** @hide 241 * Vector dot Product 242 * 243 * @param a 244 * @return 245 */ 246 public float dotProduct(Float2 a) { 247 return (x * a.x) + (y * a.y); 248 } 249 250 /** @hide 251 * Vector dot Product 252 * 253 * @param a 254 * @param b 255 * @return 256 */ 257 public static float dotProduct(Float2 a, Float2 b) { 258 return (b.x * a.x) + (b.y * a.y); 259 } 260 261 /** @hide 262 * Vector add Multiple 263 * 264 * @param a 265 * @param factor 266 */ 267 public void addMultiple(Float2 a, float factor) { 268 x += a.x * factor; 269 y += a.y * factor; 270 } 271 272 /** @hide 273 * set vector value by float2 274 * 275 * @param a 276 */ 277 public void set(Float2 a) { 278 this.x = a.x; 279 this.y = a.y; 280 } 281 282 /** @hide 283 * set vector negate 284 */ 285 public void negate() { 286 x = -x; 287 y = -y; 288 } 289 290 /** @hide 291 * get vector length 292 * 293 * @return 294 */ 295 public int length() { 296 return 2; 297 } 298 299 /** @hide 300 * return the element sum of vector 301 * 302 * @return 303 */ 304 public float elementSum() { 305 return x + y; 306 } 307 308 /** @hide 309 * get the vector field value by index 310 * 311 * @param i 312 * @return 313 */ 314 public float get(int i) { 315 switch (i) { 316 case 0: 317 return x; 318 case 1: 319 return y; 320 default: 321 throw new IndexOutOfBoundsException("Index: i"); 322 } 323 } 324 325 /** @hide 326 * set the vector field value by index 327 * 328 * @param i 329 * @param value 330 */ 331 public void setAt(int i, float value) { 332 switch (i) { 333 case 0: 334 x = value; 335 return; 336 case 1: 337 y = value; 338 return; 339 default: 340 throw new IndexOutOfBoundsException("Index: i"); 341 } 342 } 343 344 /** @hide 345 * add the vector field value by index 346 * 347 * @param i 348 * @param value 349 */ 350 public void addAt(int i, float value) { 351 switch (i) { 352 case 0: 353 x += value; 354 return; 355 case 1: 356 y += value; 357 return; 358 default: 359 throw new IndexOutOfBoundsException("Index: i"); 360 } 361 } 362 363 /** @hide 364 * set the vector field value 365 * 366 * @param x 367 * @param y 368 */ 369 public void setValues(float x, float y) { 370 this.x = x; 371 this.y = y; 372 } 373 374 /** @hide 375 * copy the vector to float array 376 * 377 * @param data 378 * @param offset 379 */ 380 public void copyTo(float[] data, int offset) { 381 data[offset] = x; 382 data[offset + 1] = y; 383 } 384 } 385