You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
54 lines
1.6 KiB
54 lines
1.6 KiB
2 years ago
|
C Copyright(C) 1999-2020 National Technology & Engineering Solutions
|
||
|
C of Sandia, LLC (NTESS). Under the terms of Contract DE-NA0003525 with
|
||
|
C NTESS, the U.S. Government retains certain rights in this software.
|
||
|
C
|
||
|
C See packages/seacas/LICENSE for details
|
||
|
|
||
|
C=======================================================================
|
||
|
SUBROUTINE ROTEYE (EYE, ROTCEN, ROTMAT, *)
|
||
|
C=======================================================================
|
||
|
|
||
|
C --*** ROTEYE *** (MESH) Get rotation matrix from eye position
|
||
|
C -- Written by Amy Gilkey - revised 10/21/86
|
||
|
C --
|
||
|
C --ROTEYE derives the rotation matrix from the given eye position.
|
||
|
C --Rotation matrix gives an X rotation followed by a Y rotation.
|
||
|
C --
|
||
|
C --Parameters:
|
||
|
C -- EYE - IN - the eye position
|
||
|
C -- ROTCEN - IN - the center of rotation
|
||
|
C -- ROTMAT - OUT - the rotation matrix
|
||
|
C -- * - return statement if error in eye position
|
||
|
|
||
|
REAL EYE(3)
|
||
|
REAL ROTCEN(3)
|
||
|
REAL ROTMAT(3,3)
|
||
|
|
||
|
X = EYE(1) - ROTCEN(1)
|
||
|
Y = EYE(2) - ROTCEN(2)
|
||
|
Z = EYE(3) - ROTCEN(3)
|
||
|
VMAG1 = SQRT (Y*Y + Z*Z)
|
||
|
VMAG2 = SQRT (X*X + Y*Y + Z*Z)
|
||
|
IF (VMAG1 .EQ. 0.0) GOTO 100
|
||
|
COS1 = Z / VMAG1
|
||
|
SIN1 = Y / VMAG1
|
||
|
COS2 = VMAG1 / VMAG2
|
||
|
SIN2 = -X / VMAG2
|
||
|
|
||
|
ROTMAT(1,1) = COS2
|
||
|
ROTMAT(2,1) = SIN1 * SIN2
|
||
|
ROTMAT(3,1) = COS1 * SIN2
|
||
|
ROTMAT(1,2) = 0.0
|
||
|
ROTMAT(2,2) = COS1
|
||
|
ROTMAT(3,2) = - SIN1
|
||
|
ROTMAT(1,3) = - SIN2
|
||
|
ROTMAT(2,3) = SIN1 * COS2
|
||
|
ROTMAT(3,3) = COS1 * COS2
|
||
|
|
||
|
RETURN
|
||
|
|
||
|
100 CONTINUE
|
||
|
CALL PRTERR ('CMDERR', 'Eye cannot be exactly on center')
|
||
|
RETURN 1
|
||
|
END
|