blob: 26193d2d2f35a59424a7fb250b5419ae96d1201c [file] [log] [blame]
Jason Sams25430d02010-02-02 15:26:40 -08001/*
Matthieu Delahaye6a5875c2013-09-10 15:11:35 -05002 * Copyright (C) 2013 The Android Open Source Project
Jason Sams25430d02010-02-02 15:26:40 -08003 *
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
17package android.renderscript;
18
Stephen Hines9c9ad3f8c22012-05-07 15:34:29 -070019/**
Matthieu Delahaye6a5875c2013-09-10 15:11:35 -050020 * Vector version of the basic float type.
21 * Provides two float fields packed.
22 */
23public class Float2 {
Jason Sams25430d02010-02-02 15:26:40 -080024 public float x;
25 public float y;
Matthieu Delahaye6a5875c2013-09-10 15:11:35 -050026
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 }
Jason Sams25430d02010-02-02 15:26:40 -0800384}