001        package com.croftsoft.core.math.axis;
002    
003        import com.croftsoft.core.math.matrix.Matrix3x3Mut;
004        import com.croftsoft.core.math.quat.QuatMut;
005        
006        /***********************************************************************
007        * Implementation of interface AxisAngleMut.
008        * 
009        * @version
010        *   $Id: AxisAngleImp.java,v 1.2 2008/05/09 20:39:38 croft Exp $
011        * @since
012        *   2008-05-09
013        * @author
014        *   <a href="https://www.croftsoft.com/">David Wallace Croft</a>
015        ***********************************************************************/
016    
017        public final class  AxisAngleImp
018          implements AxisAngleMut
019        ////////////////////////////////////////////////////////////////////////
020        ////////////////////////////////////////////////////////////////////////
021        {
022          
023        private double  degrees, x, y, z;
024        
025        ////////////////////////////////////////////////////////////////////////
026        ////////////////////////////////////////////////////////////////////////
027        
028        public  AxisAngleImp (
029          final double  degrees,
030          final double  x,
031          final double  y,
032          final double  z )
033        ////////////////////////////////////////////////////////////////////////
034        {
035          this.degrees = degrees;
036          
037          this.x = x;
038          
039          this.y = y;
040          
041          this.z = z;
042        }
043        
044        public  AxisAngleImp ( final AxisAngle  axisAngle )
045        ////////////////////////////////////////////////////////////////////////
046        {
047          copy ( axisAngle );
048        }
049        
050        public  AxisAngleImp ( )
051        ////////////////////////////////////////////////////////////////////////
052        {
053          this ( 0, 1, 0, 0 );
054        }
055        
056        ////////////////////////////////////////////////////////////////////////
057        // accessor methods
058        ////////////////////////////////////////////////////////////////////////
059        
060        public double  getDegrees ( ) { return degrees; }
061        
062        public double  getX ( ) { return x; }
063        
064        public double  getY ( ) { return y; }
065        
066        public double  getZ ( ) { return z; }
067        
068        ////////////////////////////////////////////////////////////////////////
069        // mutator methods
070        ////////////////////////////////////////////////////////////////////////
071        
072        public void  copy ( final AxisAngle  axisAngle )
073        ////////////////////////////////////////////////////////////////////////
074        {
075          degrees = axisAngle.getDegrees ( );
076          
077          x = axisAngle.getX ( );
078          
079          y = axisAngle.getY ( );
080          
081          z = axisAngle.getZ ( );
082        }
083        
084        public void  normalize ( )
085        ////////////////////////////////////////////////////////////////////////
086        {
087          AxisAngleLib.normalize ( this );
088        }
089        
090        public void  setDegrees ( final double  degrees )
091                       { this.degrees = degrees; }
092        
093        public void  setX ( final double  x ) { this.x = x; }
094        
095        public void  setY ( final double  y ) { this.y = y; }
096        
097        public void  setZ ( final double  z ) { this.z = z; }
098        
099        ////////////////////////////////////////////////////////////////////////
100        // operand methods
101        ////////////////////////////////////////////////////////////////////////
102        
103        public boolean  matches ( final AxisAngle  axisAngle )
104        ////////////////////////////////////////////////////////////////////////
105        {
106          return AxisAngleLib.matches ( this, axisAngle );
107        }
108        
109        public boolean  matches (
110          final AxisAngle    axisAngle,
111          final double  tolerance )
112        ////////////////////////////////////////////////////////////////////////
113        {
114          return AxisAngleLib.matches ( this, axisAngle, tolerance );
115        }
116        
117        ////////////////////////////////////////////////////////////////////////
118        // calculation methods
119        ////////////////////////////////////////////////////////////////////////
120        
121        public double  magnitude ( )
122        ////////////////////////////////////////////////////////////////////////
123        {
124          return AxisAngleLib.magnitude ( this );
125        }
126        
127        public QuatMut  toQuat ( )
128        ////////////////////////////////////////////////////////////////////////
129        {
130          return AxisAngleLib.toQuat ( this );
131        }
132        
133        public Matrix3x3Mut  toRotationMatrix ( )
134        ////////////////////////////////////////////////////////////////////////
135        {
136          return AxisAngleLib.toRotationMatrix ( this );
137        }
138        
139        ////////////////////////////////////////////////////////////////////////
140        // overridden Object methods
141        ////////////////////////////////////////////////////////////////////////
142        
143        @Override
144        public String  toString ( )
145        ////////////////////////////////////////////////////////////////////////
146        {
147          return AxisAngleLib.toString ( this );
148        }
149        
150        ////////////////////////////////////////////////////////////////////////
151        ////////////////////////////////////////////////////////////////////////
152        }