Deprecated: The each() function is deprecated. This message will be suppressed on further calls in /home/zhenxiangba/zhenxiangba.com/public_html/phproxy-improved-master/index.php on line 456
!----- Ex9_7: Projection of a Vector -----
MODULE vector_arithmetic
TYPE vector
REAL :: x, y, z
END TYPE
!
INTERFACE OPERATOR(-)
MODULE PROCEDURE subtraction
END INTERFACE
!
INTERFACE OPERATOR(*)
MODULE PROCEDURE scalar_multiplication
END INTERFACE
!
INTERFACE OPERATOR(*)
MODULE PROCEDURE inner_product
END INTERFACE
!
CONTAINS
FUNCTION subtraction(u, v) RESULT(w)
TYPE(vector), INTENT(IN) :: u, v
TYPE(vector) :: w
w%x = u%x - v%x; w%y = u%y - v%y; w%z = u%z - v%z
END FUNCTION
!
FUNCTION scalar_multiplication(s, v) RESULT(w)
TYPE(vector), INTENT(IN) :: v
TYPE(vector) :: w
REAL, INTENT(IN) :: s
w%x = s * v%x; w%y = s * v%y; w%z = s * v%z
END FUNCTION
!
FUNCTION inner_product(u, v) RESULT(s)
TYPE(vector), INTENT(IN) :: u, v
REAL :: s
s = u%x * v%x + u%y * v%y + u%z * v%z
END FUNCTION
END MODULE vector_arithmetic
!
PROGRAM main
USE vector_arithmetic
TYPE(vector) :: a, n, perp, planar
PRINT *, "Input the normal vector of projection-plane:"
READ *, n
PRINT *, "Input a 3D vector:"
READ *, a
perp = ( (a*n)/(n*n) ) * n
planar = a - perp
PRINT "(A, 3F7.2, A)", 'Perp. Component = (', perp, ' )'
PRINT "(A, 3F7.2, A)", 'Planar Component = (', planar, ' )'
END