From 7fdd2bf3962b1f47a6ec2d8c1e0c26b2a5b3b1b6 Mon Sep 17 00:00:00 2001 From: ZaellixA <axilleaz@protonmail.com> Date: Sat, 10 Aug 2024 23:53:42 +0100 Subject: [PATCH] Add the first Julia implementations of some of the utility functions --- Utilities/Generic/Julia/Utils.jl | 188 +++++++++++++++++++++++++++++++ 1 file changed, 188 insertions(+) create mode 100644 Utilities/Generic/Julia/Utils.jl diff --git a/Utilities/Generic/Julia/Utils.jl b/Utilities/Generic/Julia/Utils.jl new file mode 100644 index 0000000..31fee5c --- /dev/null +++ b/Utilities/Generic/Julia/Utils.jl @@ -0,0 +1,188 @@ +""" +This is the module with the Julia implementations of the generic utilities of the IN-NOVA project. +-------------------------------------------------- +Author: Achilles Kappis +e-mail: axilleaz@protonmail.com + +Date: 10/08/2024 (DD/MM/YYYY) + +Copyright: MIT +-------------------------------------------------- + +# Functions included +- stepFunc +- isEven +- isOdd +- rotMat3d +-------------------------------------------------- +""" +module Utils + + + +""" +Numerical (simple) Heaviside function +-------------------------------------------------- +Author: Achilles Kappis +e-mail: axilleaz@protonmail.com + +Date: 10/08/2024 (DD/MM/YYYY) + +Copyright: MIT +-------------------------------------------------- +Functionality: A Heaviside numerical (step) function +-------------------------------------------------- +# Input + +x::Real: The argument of the function. + +zeroHalf::Bool (Optional): The way x = 0 is treated. If this argument is true, the returned value is 0.5 when x = 0, otherwise it is 1. [Default: false]. + +-------------------------------------------------- +# Output +result::Float64: Either 0 or 1 based on whether the argument of the function is greater or equal to zero. +-------------------------------------------------- +# Notes + +-------------------------------------------------- +""" +function stepFunc(x::Real; zeroHalf::Bool = false) + if zeroHalf && x == 0 + result = 0.5 + else + result = x >= 0 + end + + return convert(Float64, result) +end + + + + + +""" +Determine whether a number is even +-------------------------------------------------- +Author: Achilles Kappis +e-mail: axilleaz@protonmail.com + +Date: 10/08/2024 (DD/MM/YYYY) + +Copyright: MIT +-------------------------------------------------- +Functionality: Function to check if a real integer is even. +-------------------------------------------------- +# Input arguments + +num::Integer: The number to check. + +-------------------------------------------------- +# Output arguments + +result::Bool: True if the number is even, False else. + +-------------------------------------------------- +# Notes + +-------------------------------------------------- +""" +function isEven(num::Integer) + return mod(num, 2) == 0 +end + + + + +""" +Determine whether a number is odd +-------------------------------------------------- +Author: Achilles Kappis +e-mail: axilleaz@protonmail.com + +Date: 10/08/2024 (DD/MM/YYYY) + +Copyright: MIT +-------------------------------------------------- +Functionality: Function to check if a real integer is odd. +-------------------------------------------------- +# Input arguments + +num::Integer: The number to check. + +-------------------------------------------------- +# Output arguments + +result::Bool: True if the number is even, False else. + +-------------------------------------------------- +# Notes + +-------------------------------------------------- +""" +function isOdd(num::Integer) + return mod(num, 2) != 0 +end + + + + +""" +Calculate a 3D rotation matrix +-------------------------------------------------- +Author: Achilles Kappis +e-mail: axilleaz@protonmail.com + +Date: 10/08/2024 (DD/MM/YYYY) + +Copyright: MIT +-------------------------------------------------- +Functionality: Calculate a 3D rotation matrix. +-------------------------------------------------- +# Input + +xAng::Real: Rotation angle around the x-axis. + +yAng::Real (Optional): Rotation angle around the y-axis. [Default: 0]. + +zAng::Real (Optional): Rotation angle around the z-axis. [Default: 0]. + +deg::Bool (Optional) [keyword]: This value declares if the provided angles are in degrees or not. If not, radians are assumed. [Default: false]. +-------------------------------------------------- +# Output + +rotMat::Matrix{Real}: A 3x3 matrix which applies the rotation. + +xRotMat::Matrix{Real}: A 3x3 matrix which applies the rotation around the x-axis. + +yRotMat::Matrix{Real}: A 3x3 matrix which applies the rotation around the y-axis. + +zRotMat::Matrix: A 3x3 matrix which applies the rotation around the z-axis. +-------------------------------------------------- +# Notes + +-------------------------------------------------- +""" +function rotMat3d(xAng::Real, yAng::Real = 0, zAng::Real = 0; deg::Bool = false) + # Check for units of the angles + if deg + xAng = deg2rad(xAng) + yAng = deg2rad(yAng) + zAng = deg2rad(zAng) + end + + # Generate the respective matrices + xRotMat = [1 0 0; 0 cos(xAng) -sin(xAng); 0 sin(xAng) cos(xAng)] + yRotMat = [cos(yAng) 0 sin(yAng); 0 1 0; -sin(yAng) 0 cos(yAng)] + zRotMat = [cos(zAng) -sin(zAng) 0; sin(zAng) cos(zAng) 0; 0 0 1] + + # Calculate the "total" matrix + rotMat = xRotMat * yRotMat * zRotMat + + # Return + return rotMat, xRotMat, yRotMat, zRotMat +end + + + + +end # Module end -- GitLab