diff --git a/Maths/Volume.js b/Maths/Volume.js new file mode 100644 index 000000000..a539cda05 --- /dev/null +++ b/Maths/Volume.js @@ -0,0 +1,123 @@ +/* +Calculate the volume of the shapes + +Volume for Cuboid +Volume for Cube +Volume for Cone +Volume for Pyramid +Volume for Cylinder +Volume for Triangular Prism +Volume for Pentagonal Prism +Volume for Sphere +Volume for Hemisphere +*/ + +/* + Calculate the volume for a Cuboid + Reference: https://www.cuemath.com/measurement/volume-of-cuboid/ + return width * length * height +*/ +const volCuboid = (width, length, height) => { + isNumber(width, 'Width') + isNumber(length, 'Length') + isNumber(height, 'Height') + return (width * length * height) +} + +/* + Calculate the volume for a Cube + Reference: https://www.cuemath.com/measurement/volume-of-cube/ + return length * length * length +*/ +const volCube = (length) => { + isNumber(length, 'Length') + return (length ** 3) +} + +/* + Calculate the volume for a Cone + Reference: https://www.cuemath.com/measurement/volume-of-cone/ + return PI * radius^2 * height/3 +*/ +const volCone = (radius, height) => { + isNumber(radius, 'Radius') + isNumber(height, 'Height') + return (Math.PI * radius ** 2 * height / 3.0) +} + +/* + Calculate the volume for a Pyramid + Reference: https://www.cuemath.com/measurement/volume-of-pyramid/ + return (baseLength * baseWidth * height) / 3 +*/ +const volPyramid = (baseLength, baseWidth, height) => { + isNumber(baseLength, 'BaseLength') + isNumber(baseWidth, 'BaseWidth') + isNumber(height, 'Height') + return (baseLength * baseWidth * height) / 3.0 +} + +/* + Calculate the volume for a Cylinder + Reference: https://www.cuemath.com/measurement/volume-of-cylinder/ + return PI * radius^2 * height +*/ +const volCylinder = (radius, height) => { + isNumber(radius, 'Radius') + isNumber(height, 'Height') + return (Math.PI * radius ** 2 * height) +} + +/* + Calculate the volume for a Triangular Prism + Reference: http://lrd.kangan.edu.au/numbers/content/03_volume/04_page.htm + return 1 / 2 * baseLengthTriangle * heightTriangle * height +*/ +const volTriangularPrism = (baseLengthTriangle, heightTriangle, height) => { + isNumber(baseLengthTriangle, 'BaseLengthTriangle') + isNumber(heightTriangle, 'HeightTriangle') + isNumber(height, 'Height') + return (1 / 2 * baseLengthTriangle * heightTriangle * height) +} + +/* + Calculate the volume for a Pentagonal Prism + Reference: https://www.cuemath.com/measurement/volume-of-pentagonal-prism/ + return 5/2 * pentagonalLength * pentagonalBaseLength * height +*/ +const volPentagonalPrism = (pentagonalLength, pentagonalBaseLength, height) => { + isNumber(pentagonalLength, 'PentagonalLength') + isNumber(pentagonalBaseLength, 'PentagonalBaseLength') + isNumber(height, 'Height') + return (5 / 2 * pentagonalLength * pentagonalBaseLength * height) +} + +/* + Calculate the volume for a Sphere + Reference: https://www.cuemath.com/measurement/volume-of-sphere/ + return 4/3 * PI * radius^3 +*/ +const volSphere = (radius) => { + isNumber(radius, 'Radius') + return (4 / 3 * Math.PI * radius ** 3) +} + +/* + Calculate the volume for a Hemisphere + Reference: https://www.cuemath.com/measurement/volume-of-hemisphere/ + return (2 * PI * radius^3)/3 +*/ +const volHemisphere = (radius) => { + isNumber(radius, 'Radius') + return (2.0 * Math.PI * radius ** 3) / 3.0 +} + +const isNumber = (number, noName = 'number') => { + if (typeof number !== 'number') { + throw new TypeError('The ' + noName + ' should be Number type') + } else if (number < 0 || (!Number.isFinite(number))) { + throw new Error('The ' + noName + ' only accepts positive values') + } +} + +export { volCuboid, volCube, volCone, volPyramid, volCylinder, volTriangularPrism, volPentagonalPrism, volSphere, volHemisphere }