mirror of
https://github.com/TheAlgorithms/Python.git
synced 2025-01-18 16:27:02 +00:00
Add surface area of cuboid, conical frustum (#6442)
* Add surface area of cuboid, conical frustum * add tests for floats, zeroes * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
This commit is contained in:
parent
32ff33648e
commit
467ade28a0
131
maths/area.py
131
maths/area.py
|
@ -7,9 +7,12 @@ from math import pi, sqrt
|
|||
def surface_area_cube(side_length: float) -> float:
|
||||
"""
|
||||
Calculate the Surface Area of a Cube.
|
||||
|
||||
>>> surface_area_cube(1)
|
||||
6
|
||||
>>> surface_area_cube(1.6)
|
||||
15.360000000000003
|
||||
>>> surface_area_cube(0)
|
||||
0
|
||||
>>> surface_area_cube(3)
|
||||
54
|
||||
>>> surface_area_cube(-1)
|
||||
|
@ -22,16 +25,46 @@ def surface_area_cube(side_length: float) -> float:
|
|||
return 6 * side_length**2
|
||||
|
||||
|
||||
def surface_area_cuboid(length: float, breadth: float, height: float) -> float:
|
||||
"""
|
||||
Calculate the Surface Area of a Cuboid.
|
||||
>>> surface_area_cuboid(1, 2, 3)
|
||||
22
|
||||
>>> surface_area_cuboid(0, 0, 0)
|
||||
0
|
||||
>>> surface_area_cuboid(1.6, 2.6, 3.6)
|
||||
38.56
|
||||
>>> surface_area_cuboid(-1, 2, 3)
|
||||
Traceback (most recent call last):
|
||||
...
|
||||
ValueError: surface_area_cuboid() only accepts non-negative values
|
||||
>>> surface_area_cuboid(1, -2, 3)
|
||||
Traceback (most recent call last):
|
||||
...
|
||||
ValueError: surface_area_cuboid() only accepts non-negative values
|
||||
>>> surface_area_cuboid(1, 2, -3)
|
||||
Traceback (most recent call last):
|
||||
...
|
||||
ValueError: surface_area_cuboid() only accepts non-negative values
|
||||
"""
|
||||
if length < 0 or breadth < 0 or height < 0:
|
||||
raise ValueError("surface_area_cuboid() only accepts non-negative values")
|
||||
return 2 * ((length * breadth) + (breadth * height) + (length * height))
|
||||
|
||||
|
||||
def surface_area_sphere(radius: float) -> float:
|
||||
"""
|
||||
Calculate the Surface Area of a Sphere.
|
||||
Wikipedia reference: https://en.wikipedia.org/wiki/Sphere
|
||||
Formula: 4 * pi * r^2
|
||||
|
||||
>>> surface_area_sphere(5)
|
||||
314.1592653589793
|
||||
>>> surface_area_sphere(1)
|
||||
12.566370614359172
|
||||
>>> surface_area_sphere(1.6)
|
||||
32.169908772759484
|
||||
>>> surface_area_sphere(0)
|
||||
0.0
|
||||
>>> surface_area_sphere(-1)
|
||||
Traceback (most recent call last):
|
||||
...
|
||||
|
@ -46,7 +79,6 @@ def surface_area_hemisphere(radius: float) -> float:
|
|||
"""
|
||||
Calculate the Surface Area of a Hemisphere.
|
||||
Formula: 3 * pi * r^2
|
||||
|
||||
>>> surface_area_hemisphere(5)
|
||||
235.61944901923448
|
||||
>>> surface_area_hemisphere(1)
|
||||
|
@ -70,11 +102,14 @@ def surface_area_cone(radius: float, height: float) -> float:
|
|||
Calculate the Surface Area of a Cone.
|
||||
Wikipedia reference: https://en.wikipedia.org/wiki/Cone
|
||||
Formula: pi * r * (r + (h ** 2 + r ** 2) ** 0.5)
|
||||
|
||||
>>> surface_area_cone(10, 24)
|
||||
1130.9733552923256
|
||||
>>> surface_area_cone(6, 8)
|
||||
301.59289474462014
|
||||
>>> surface_area_cone(1.6, 2.6)
|
||||
23.387862992395807
|
||||
>>> surface_area_cone(0, 0)
|
||||
0.0
|
||||
>>> surface_area_cone(-1, -2)
|
||||
Traceback (most recent call last):
|
||||
...
|
||||
|
@ -93,14 +128,51 @@ def surface_area_cone(radius: float, height: float) -> float:
|
|||
return pi * radius * (radius + (height**2 + radius**2) ** 0.5)
|
||||
|
||||
|
||||
def surface_area_conical_frustum(
|
||||
radius_1: float, radius_2: float, height: float
|
||||
) -> float:
|
||||
"""
|
||||
Calculate the Surface Area of a Conical Frustum.
|
||||
>>> surface_area_conical_frustum(1, 2, 3)
|
||||
45.511728065337266
|
||||
>>> surface_area_conical_frustum(4, 5, 6)
|
||||
300.7913575056268
|
||||
>>> surface_area_conical_frustum(0, 0, 0)
|
||||
0.0
|
||||
>>> surface_area_conical_frustum(1.6, 2.6, 3.6)
|
||||
78.57907060751548
|
||||
>>> surface_area_conical_frustum(-1, 2, 3)
|
||||
Traceback (most recent call last):
|
||||
...
|
||||
ValueError: surface_area_conical_frustum() only accepts non-negative values
|
||||
>>> surface_area_conical_frustum(1, -2, 3)
|
||||
Traceback (most recent call last):
|
||||
...
|
||||
ValueError: surface_area_conical_frustum() only accepts non-negative values
|
||||
>>> surface_area_conical_frustum(1, 2, -3)
|
||||
Traceback (most recent call last):
|
||||
...
|
||||
ValueError: surface_area_conical_frustum() only accepts non-negative values
|
||||
"""
|
||||
if radius_1 < 0 or radius_2 < 0 or height < 0:
|
||||
raise ValueError(
|
||||
"surface_area_conical_frustum() only accepts non-negative values"
|
||||
)
|
||||
slant_height = (height**2 + (radius_1 - radius_2) ** 2) ** 0.5
|
||||
return pi * ((slant_height * (radius_1 + radius_2)) + radius_1**2 + radius_2**2)
|
||||
|
||||
|
||||
def surface_area_cylinder(radius: float, height: float) -> float:
|
||||
"""
|
||||
Calculate the Surface Area of a Cylinder.
|
||||
Wikipedia reference: https://en.wikipedia.org/wiki/Cylinder
|
||||
Formula: 2 * pi * r * (h + r)
|
||||
|
||||
>>> surface_area_cylinder(7, 10)
|
||||
747.6990515543707
|
||||
>>> surface_area_cylinder(1.6, 2.6)
|
||||
42.22300526424682
|
||||
>>> surface_area_cylinder(0, 0)
|
||||
0.0
|
||||
>>> surface_area_cylinder(6, 8)
|
||||
527.7875658030853
|
||||
>>> surface_area_cylinder(-1, -2)
|
||||
|
@ -124,9 +196,12 @@ def surface_area_cylinder(radius: float, height: float) -> float:
|
|||
def area_rectangle(length: float, width: float) -> float:
|
||||
"""
|
||||
Calculate the area of a rectangle.
|
||||
|
||||
>>> area_rectangle(10, 20)
|
||||
200
|
||||
>>> area_rectangle(1.6, 2.6)
|
||||
4.16
|
||||
>>> area_rectangle(0, 0)
|
||||
0
|
||||
>>> area_rectangle(-1, -2)
|
||||
Traceback (most recent call last):
|
||||
...
|
||||
|
@ -148,9 +223,12 @@ def area_rectangle(length: float, width: float) -> float:
|
|||
def area_square(side_length: float) -> float:
|
||||
"""
|
||||
Calculate the area of a square.
|
||||
|
||||
>>> area_square(10)
|
||||
100
|
||||
>>> area_square(0)
|
||||
0
|
||||
>>> area_square(1.6)
|
||||
2.5600000000000005
|
||||
>>> area_square(-1)
|
||||
Traceback (most recent call last):
|
||||
...
|
||||
|
@ -164,9 +242,12 @@ def area_square(side_length: float) -> float:
|
|||
def area_triangle(base: float, height: float) -> float:
|
||||
"""
|
||||
Calculate the area of a triangle given the base and height.
|
||||
|
||||
>>> area_triangle(10, 10)
|
||||
50.0
|
||||
>>> area_triangle(1.6, 2.6)
|
||||
2.08
|
||||
>>> area_triangle(0, 0)
|
||||
0.0
|
||||
>>> area_triangle(-1, -2)
|
||||
Traceback (most recent call last):
|
||||
...
|
||||
|
@ -188,13 +269,15 @@ def area_triangle(base: float, height: float) -> float:
|
|||
def area_triangle_three_sides(side1: float, side2: float, side3: float) -> float:
|
||||
"""
|
||||
Calculate area of triangle when the length of 3 sides are known.
|
||||
|
||||
This function uses Heron's formula: https://en.wikipedia.org/wiki/Heron%27s_formula
|
||||
|
||||
>>> area_triangle_three_sides(5, 12, 13)
|
||||
30.0
|
||||
>>> area_triangle_three_sides(10, 11, 12)
|
||||
51.521233486786784
|
||||
>>> area_triangle_three_sides(0, 0, 0)
|
||||
0.0
|
||||
>>> area_triangle_three_sides(1.6, 2.6, 3.6)
|
||||
1.8703742940919619
|
||||
>>> area_triangle_three_sides(-1, -2, -1)
|
||||
Traceback (most recent call last):
|
||||
...
|
||||
|
@ -233,9 +316,12 @@ def area_triangle_three_sides(side1: float, side2: float, side3: float) -> float
|
|||
def area_parallelogram(base: float, height: float) -> float:
|
||||
"""
|
||||
Calculate the area of a parallelogram.
|
||||
|
||||
>>> area_parallelogram(10, 20)
|
||||
200
|
||||
>>> area_parallelogram(1.6, 2.6)
|
||||
4.16
|
||||
>>> area_parallelogram(0, 0)
|
||||
0
|
||||
>>> area_parallelogram(-1, -2)
|
||||
Traceback (most recent call last):
|
||||
...
|
||||
|
@ -257,9 +343,12 @@ def area_parallelogram(base: float, height: float) -> float:
|
|||
def area_trapezium(base1: float, base2: float, height: float) -> float:
|
||||
"""
|
||||
Calculate the area of a trapezium.
|
||||
|
||||
>>> area_trapezium(10, 20, 30)
|
||||
450.0
|
||||
>>> area_trapezium(1.6, 2.6, 3.6)
|
||||
7.5600000000000005
|
||||
>>> area_trapezium(0, 0, 0)
|
||||
0.0
|
||||
>>> area_trapezium(-1, -2, -3)
|
||||
Traceback (most recent call last):
|
||||
...
|
||||
|
@ -297,9 +386,12 @@ def area_trapezium(base1: float, base2: float, height: float) -> float:
|
|||
def area_circle(radius: float) -> float:
|
||||
"""
|
||||
Calculate the area of a circle.
|
||||
|
||||
>>> area_circle(20)
|
||||
1256.6370614359173
|
||||
>>> area_circle(1.6)
|
||||
8.042477193189871
|
||||
>>> area_circle(0)
|
||||
0.0
|
||||
>>> area_circle(-1)
|
||||
Traceback (most recent call last):
|
||||
...
|
||||
|
@ -313,11 +405,14 @@ def area_circle(radius: float) -> float:
|
|||
def area_ellipse(radius_x: float, radius_y: float) -> float:
|
||||
"""
|
||||
Calculate the area of a ellipse.
|
||||
|
||||
>>> area_ellipse(10, 10)
|
||||
314.1592653589793
|
||||
>>> area_ellipse(10, 20)
|
||||
628.3185307179587
|
||||
>>> area_ellipse(0, 0)
|
||||
0.0
|
||||
>>> area_ellipse(1.6, 2.6)
|
||||
13.06902543893354
|
||||
>>> area_ellipse(-10, 20)
|
||||
Traceback (most recent call last):
|
||||
...
|
||||
|
@ -339,9 +434,12 @@ def area_ellipse(radius_x: float, radius_y: float) -> float:
|
|||
def area_rhombus(diagonal_1: float, diagonal_2: float) -> float:
|
||||
"""
|
||||
Calculate the area of a rhombus.
|
||||
|
||||
>>> area_rhombus(10, 20)
|
||||
100.0
|
||||
>>> area_rhombus(1.6, 2.6)
|
||||
2.08
|
||||
>>> area_rhombus(0, 0)
|
||||
0.0
|
||||
>>> area_rhombus(-1, -2)
|
||||
Traceback (most recent call last):
|
||||
...
|
||||
|
@ -374,9 +472,12 @@ if __name__ == "__main__":
|
|||
print(f"Rhombus: {area_rhombus(10, 20) = }")
|
||||
print(f"Trapezium: {area_trapezium(10, 20, 30) = }")
|
||||
print(f"Circle: {area_circle(20) = }")
|
||||
print(f"Ellipse: {area_ellipse(10, 20) = }")
|
||||
print("\nSurface Areas of various geometric shapes: \n")
|
||||
print(f"Cube: {surface_area_cube(20) = }")
|
||||
print(f"Cuboid: {surface_area_cuboid(10, 20, 30) = }")
|
||||
print(f"Sphere: {surface_area_sphere(20) = }")
|
||||
print(f"Hemisphere: {surface_area_hemisphere(20) = }")
|
||||
print(f"Cone: {surface_area_cone(10, 20) = }")
|
||||
print(f"Conical Frustum: {surface_area_conical_frustum(10, 20, 30) = }")
|
||||
print(f"Cylinder: {surface_area_cylinder(10, 20) = }")
|
||||
|
|
Loading…
Reference in New Issue
Block a user