001    /*
002    *
003    
004    Licensed under the Apache License, Version 2.0 (the "License");
005    you may not use this file except in compliance with the License.
006    You may obtain a copy of the License at
007    
008       http://www.apache.org/licenses/LICENSE-2.0
009    
010    Unless required by applicable law or agreed to in writing, software
011    distributed under the License is distributed on an "AS IS" BASIS,
012    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013    See the License for the specific language governing permissions and
014    limitations under the License.
015    */
016    
017    package railo.runtime.img.vecmath;
018    
019    /**
020     * Vector math package, converted to look similar to javax.vecmath.
021     */
022    public class Tuple3f {
023            public float x, y, z;
024    
025            public Tuple3f() {
026                    this( 0, 0, 0 );
027            }
028            
029            public Tuple3f( float[] x ) {
030                    this.x = x[0];
031                    this.y = x[1];
032                    this.z = x[2];
033            }
034    
035            public Tuple3f( float x, float y, float z ) {
036                    this.x = x;
037                    this.y = y;
038                    this.z = z;
039            }
040    
041            public Tuple3f( Tuple3f t ) {
042                    this.x = t.x;
043                    this.y = t.y;
044                    this.z = t.z;
045            }
046    
047            public void absolute() {
048                    x = Math.abs(x);
049                    y = Math.abs(y);
050                    z = Math.abs(z);
051            }
052    
053            public void absolute( Tuple3f t ) {
054                    x = Math.abs(t.x);
055                    y = Math.abs(t.y);
056                    z = Math.abs(t.z);
057            }
058    
059            public void clamp( float min, float max ) {
060                    if ( x < min )
061                            x = min;
062                    else if ( x > max )
063                            x = max;
064                    if ( y < min )
065                            y = min;
066                    else if ( y > max )
067                            y = max;
068                    if ( z < min )
069                            z = min;
070                    else if ( z > max )
071                            z = max;
072            }
073    
074            public void set( float x, float y, float z ) {
075                    this.x = x;
076                    this.y = y;
077                    this.z = z;
078            }
079    
080            public void set( float[] x ) {
081                    this.x = x[0];
082                    this.y = x[1];
083                    this.z = x[2];
084            }
085    
086            public void set( Tuple3f t ) {
087                    x = t.x;
088                    y = t.y;
089                    z = t.z;
090            }
091    
092            public void get( Tuple3f t ) {
093                    t.x = x;
094                    t.y = y;
095                    t.z = z;
096            }
097    
098            public void get( float[] t ) {
099                    t[0] = x;
100                    t[1] = y;
101                    t[2] = z;
102            }
103    
104            public void negate() {
105                    x = -x;
106                    y = -y;
107                    z = -z;
108            }
109    
110            public void negate( Tuple3f t ) {
111                    x = -t.x;
112                    y = -t.y;
113                    z = -t.z;
114            }
115    
116            public void interpolate( Tuple3f t, float alpha ) {
117                    float a = 1-alpha;
118                    x = a*x + alpha*t.x;
119                    y = a*y + alpha*t.y;
120                    z = a*z + alpha*t.z;
121            }
122    
123            public void scale( float s ) {
124                    x *= s;
125                    y *= s;
126                    z *= s;
127            }
128    
129            public void add( Tuple3f t ) {
130                    x += t.x;
131                    y += t.y;
132                    z += t.z;
133            }
134    
135            public void add( Tuple3f t1, Tuple3f t2 ) {
136                    x = t1.x+t2.x;
137                    y = t1.y+t2.y;
138                    z = t1.z+t2.z;
139            }
140    
141            public void sub( Tuple3f t ) {
142                    x -= t.x;
143                    y -= t.y;
144                    z -= t.z;
145            }
146    
147            public void sub( Tuple3f t1, Tuple3f t2 ) {
148                    x = t1.x-t2.x;
149                    y = t1.y-t2.y;
150                    z = t1.z-t2.z;
151            }
152    
153            public void scaleAdd( float s, Tuple3f t ) {
154                    x += s*t.x;
155                    y += s*t.y;
156                    z += s*t.z;
157            }
158            
159            public void scaleAdd( float s, Tuple3f t1, Tuple3f t2 ) {
160                    x = s*t1.x + t2.x;
161                    y = s*t1.y + t2.y;
162                    z = s*t1.z + t2.z;
163            }
164            
165            public String toString() {
166                    return "["+x+", "+y+", "+z+"]";
167            }
168            
169    }