diff --git a/src/main/java/com/thealgorithms/maths/Area.java b/src/main/java/com/thealgorithms/maths/Area.java index 84fc67159379..9b798c95e1da 100644 --- a/src/main/java/com/thealgorithms/maths/Area.java +++ b/src/main/java/com/thealgorithms/maths/Area.java @@ -78,7 +78,7 @@ public static double surfaceAreaSphere(final double radius) { */ public static double surfaceAreaPyramid(final double sideLength, final double slantHeight) { if (sideLength <= 0) { - throw new IllegalArgumentException(""); + throw new IllegalArgumentException("Side length must be greater than 0"); } if (slantHeight <= 0) { throw new IllegalArgumentException("slant height must be greater than 0"); @@ -232,4 +232,30 @@ public static double surfaceAreaCone(final double radius, final double height) { } return Math.PI * radius * (radius + Math.pow(height * height + radius * radius, 0.5)); } + + /** + * Calculate the surface area of a triangular prism with a right-triangle base. + * + * @param sideA first perpendicular side of the triangular base + * @param sideB second perpendicular side of the triangular base + * @param prismLength length of the prism + * @return surface area of the given triangular prism + */ + public static double surfaceAreaTriangularPrism(final double sideA, final double sideB, final double prismLength) { + if (sideA <= 0) { + throw new IllegalArgumentException("Side A must be greater than 0"); + } + if (sideB <= 0) { + throw new IllegalArgumentException("Side B must be greater than 0"); + } + if (prismLength <= 0) { + throw new IllegalArgumentException("Prism length must be greater than 0"); + } + + double hypotenuse = Math.sqrt(sideA * sideA + sideB * sideB); + double totalTriangleArea = sideA * sideB; + double lateralSurfaceArea = prismLength * (sideA + sideB + hypotenuse); + + return totalTriangleArea + lateralSurfaceArea; + } } diff --git a/src/test/java/com/thealgorithms/maths/AreaTest.java b/src/test/java/com/thealgorithms/maths/AreaTest.java index 1c2fe53ff3f3..5836e37d58f5 100644 --- a/src/test/java/com/thealgorithms/maths/AreaTest.java +++ b/src/test/java/com/thealgorithms/maths/AreaTest.java @@ -71,44 +71,47 @@ void surfaceAreaCone() { assertEquals(301.59289474462014, Area.surfaceAreaCone(6, 8)); } + @Test + void testSurfaceAreaTriangularPrism() { + assertEquals(132.0, Area.surfaceAreaTriangularPrism(3, 4, 10), 1e-9); + } + @Test void testAllIllegalInput() { - assertAll(() - -> assertThrows(IllegalArgumentException.class, () -> Area.surfaceAreaCube(0)), - () - -> assertThrows(IllegalArgumentException.class, () -> Area.surfaceAreaCuboid(0, 1, 2)), - () - -> assertThrows(IllegalArgumentException.class, () -> Area.surfaceAreaCuboid(1, 0, 2)), - () - -> assertThrows(IllegalArgumentException.class, () -> Area.surfaceAreaCuboid(1, 2, 0)), - () - -> assertThrows(IllegalArgumentException.class, () -> Area.surfaceAreaSphere(0)), - () - -> assertThrows(IllegalArgumentException.class, () -> Area.surfaceAreaRectangle(0, 10)), - () - -> assertThrows(IllegalArgumentException.class, () -> Area.surfaceAreaRectangle(10, 0)), - () - -> assertThrows(IllegalArgumentException.class, () -> Area.surfaceAreaCylinder(0, 1)), - () - -> assertThrows(IllegalArgumentException.class, () -> Area.surfaceAreaCylinder(1, 0)), - () - -> assertThrows(IllegalArgumentException.class, () -> Area.surfaceAreaSquare(0)), - () - -> assertThrows(IllegalArgumentException.class, () -> Area.surfaceAreaTriangle(0, 1)), - () - -> assertThrows(IllegalArgumentException.class, () -> Area.surfaceAreaTriangle(1, 0)), - () - -> assertThrows(IllegalArgumentException.class, () -> Area.surfaceAreaParallelogram(0, 1)), - () - -> assertThrows(IllegalArgumentException.class, () -> Area.surfaceAreaParallelogram(1, 0)), - () - -> assertThrows(IllegalArgumentException.class, () -> Area.surfaceAreaTrapezium(0, 1, 1)), - () - -> assertThrows(IllegalArgumentException.class, () -> Area.surfaceAreaTrapezium(1, 0, 1)), - () - -> assertThrows(IllegalArgumentException.class, () -> Area.surfaceAreaTrapezium(1, 1, 0)), - () - -> assertThrows(IllegalArgumentException.class, () -> Area.surfaceAreaCircle(0)), - () -> assertThrows(IllegalArgumentException.class, () -> Area.surfaceAreaHemisphere(0)), () -> assertThrows(IllegalArgumentException.class, () -> Area.surfaceAreaCone(1, 0)), () -> assertThrows(IllegalArgumentException.class, () -> Area.surfaceAreaCone(0, 1))); + assertAll( + () -> assertThrows(IllegalArgumentException.class, () -> Area.surfaceAreaCube(0)), + () -> assertThrows(IllegalArgumentException.class, () -> Area.surfaceAreaCuboid(0, 1, 2)), + () -> assertThrows(IllegalArgumentException.class, () -> Area.surfaceAreaCuboid(1, 0, 2)), + () -> assertThrows(IllegalArgumentException.class, () -> Area.surfaceAreaCuboid(1, 2, 0)), + () -> assertThrows(IllegalArgumentException.class, () -> Area.surfaceAreaSphere(0)), + () -> assertThrows(IllegalArgumentException.class, () -> Area.surfaceAreaRectangle(0, 10)), + () -> assertThrows(IllegalArgumentException.class, () -> Area.surfaceAreaRectangle(10, 0)), + () -> assertThrows(IllegalArgumentException.class, () -> Area.surfaceAreaCylinder(0, 1)), + () -> assertThrows(IllegalArgumentException.class, () -> Area.surfaceAreaCylinder(1, 0)), + () -> assertThrows(IllegalArgumentException.class, () -> Area.surfaceAreaSquare(0)), + () -> assertThrows(IllegalArgumentException.class, () -> Area.surfaceAreaTriangle(0, 1)), + () -> assertThrows(IllegalArgumentException.class, () -> Area.surfaceAreaTriangle(1, 0)), + () -> assertThrows(IllegalArgumentException.class, () -> Area.surfaceAreaParallelogram(0, 1)), + () -> assertThrows(IllegalArgumentException.class, () -> Area.surfaceAreaParallelogram(1, 0)), + () -> assertThrows(IllegalArgumentException.class, () -> Area.surfaceAreaTrapezium(0, 1, 1)), + () -> assertThrows(IllegalArgumentException.class, () -> Area.surfaceAreaTrapezium(1, 0, 1)), + () -> assertThrows(IllegalArgumentException.class, () -> Area.surfaceAreaTrapezium(1, 1, 0)), + () -> assertThrows(IllegalArgumentException.class, () -> Area.surfaceAreaCircle(0)), + () -> assertThrows(IllegalArgumentException.class, () -> Area.surfaceAreaHemisphere(0)), + () -> assertThrows(IllegalArgumentException.class, () -> Area.surfaceAreaCone(1, 0)), + () -> assertThrows(IllegalArgumentException.class, () -> Area.surfaceAreaCone(0, 1)), + () -> assertThrows(IllegalArgumentException.class, + () -> Area.surfaceAreaTriangularPrism(0, 4, 10)), + () -> assertThrows(IllegalArgumentException.class, + () -> Area.surfaceAreaTriangularPrism(3, 0, 10)), + () -> assertThrows(IllegalArgumentException.class, + () -> Area.surfaceAreaTriangularPrism(3, 4, 0)), + () -> assertThrows(IllegalArgumentException.class, + () -> Area.surfaceAreaTriangularPrism(-3, 4, 10)), + () -> assertThrows(IllegalArgumentException.class, + () -> Area.surfaceAreaTriangularPrism(3, -4, 10)), + () -> assertThrows(IllegalArgumentException.class, + () -> Area.surfaceAreaTriangularPrism(3, 4, -10)) + ); } -} +} \ No newline at end of file