@@ -496,7 +496,7 @@ public static Matrix4 CreateScalingMatrix(double x, double y, double z)
496496 /// <returns>The translation matrix.</returns>
497497 public static Matrix4 CreateTranslation ( XYZ position )
498498 {
499- return Matrix4 . CreateTranslation ( position . X , position . Y , position . Z ) ;
499+ return CreateTranslation ( position . X , position . Y , position . Z ) ;
500500 }
501501
502502 /// <summary>
@@ -538,17 +538,29 @@ public static Matrix4 CreateTranslation(double xPosition, double yPosition, doub
538538 /// <returns>Rotation matrix.</returns>
539539 public static Matrix4 GetArbitraryAxis ( XYZ zaxis )
540540 {
541- zaxis . Normalize ( ) ;
541+ zaxis = zaxis . Normalize ( ) ;
542542
543543 if ( zaxis . Equals ( XYZ . AxisZ ) )
544544 {
545- return Matrix4 . Identity ;
545+ return Identity ;
546546 }
547+ else if ( zaxis . Equals ( - XYZ . AxisZ ) )
548+ {
549+ return GetArbitraryAxis ( - XYZ . AxisX , zaxis ) ;
550+ }
551+
552+ XYZ xaxis ;
553+ if ( Math . Abs ( zaxis . X ) < ( 1 / 64 ) && Math . Abs ( zaxis . Y ) < ( 1 / 64 ) )
554+ {
555+ xaxis = XYZ . Cross ( XYZ . AxisY , zaxis ) ;
556+ }
557+ else
558+ {
559+ xaxis = XYZ . Cross ( XYZ . AxisZ , zaxis ) ;
560+ }
561+
562+ xaxis = xaxis . Normalize ( ) ;
547563
548- XYZ xaxis = ( ( ! ( System . Math . Abs ( zaxis . X ) < ( 1 / 64 ) ) || ! ( System . Math . Abs ( zaxis . Y ) < ( 1 / 64 ) ) )
549- ? XYZ . Cross ( XYZ . AxisZ , zaxis )
550- : XYZ . Cross ( XYZ . AxisY , zaxis ) ) ;
551- xaxis . Normalize ( ) ;
552564 return GetArbitraryAxis ( xaxis , zaxis ) ;
553565 }
554566
@@ -560,8 +572,12 @@ public static Matrix4 GetArbitraryAxis(XYZ zaxis)
560572 /// <returns>Rotation matrix.</returns>
561573 public static Matrix4 GetArbitraryAxis ( XYZ xaxis , XYZ zaxis )
562574 {
563- XYZ cross = XYZ . Cross ( zaxis , xaxis ) ;
564- return new Matrix4 ( xaxis . X , cross . X , zaxis . X , 0.0 , xaxis . Y , cross . Y , zaxis . Y , 0.0 , xaxis . Z , cross . Z , zaxis . Z , 0.0 , 0.0 , 0.0 , 0.0 , 1.0 ) ;
575+ XYZ yaxis = XYZ . Cross ( zaxis , xaxis ) ;
576+ return new Matrix4 (
577+ xaxis . X , yaxis . X , zaxis . X , 0.0 ,
578+ xaxis . Y , yaxis . Y , zaxis . Y , 0.0 ,
579+ xaxis . Z , yaxis . Z , zaxis . Z , 0.0 ,
580+ 0.0 , 0.0 , 0.0 , 1.0 ) ;
565581 }
566582
567583 /// <summary>
0 commit comments