Skip to content

Commit bee23dd

Browse files
SiddhantJain15dhruvmanila
authored andcommitted
Add function to calculate area of triangle using Heron's formula (TheAlgorithms#4065)
* Update area.py Modified area of triangle function. Added a new algorithm to calculate area when 3 sides are known * Add files via upload * Update area.py * Update area.py * Update area.py * Update area.py * Remove unnecessary whitespace Co-authored-by: Dhruv Manilawala <[email protected]>
1 parent b071c3e commit bee23dd

File tree

1 file changed

+55
-26
lines changed

1 file changed

+55
-26
lines changed

maths/area.py

+55-26
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
"""
22
Find the area of various geometric shapes
33
"""
4-
from math import pi
4+
from math import pi, sqrt
55

66

77
def surface_area_cube(side_length: float) -> float:
@@ -26,7 +26,7 @@ def surface_area_sphere(radius: float) -> float:
2626
"""
2727
Calculate the Surface Area of a Sphere.
2828
Wikipedia reference: https://en.wikipedia.org/wiki/Sphere
29-
:return 4 * pi * r^2
29+
Formula: 4 * pi * r^2
3030
3131
>>> surface_area_sphere(5)
3232
314.1592653589793
@@ -44,7 +44,7 @@ def surface_area_sphere(radius: float) -> float:
4444

4545
def area_rectangle(length: float, width: float) -> float:
4646
"""
47-
Calculate the area of a rectangle
47+
Calculate the area of a rectangle.
4848
4949
>>> area_rectangle(10, 20)
5050
200
@@ -68,7 +68,7 @@ def area_rectangle(length: float, width: float) -> float:
6868

6969
def area_square(side_length: float) -> float:
7070
"""
71-
Calculate the area of a square
71+
Calculate the area of a square.
7272
7373
>>> area_square(10)
7474
100
@@ -84,7 +84,7 @@ def area_square(side_length: float) -> float:
8484

8585
def area_triangle(base: float, height: float) -> float:
8686
"""
87-
Calculate the area of a triangle
87+
Calculate the area of a triangle given the base and height.
8888
8989
>>> area_triangle(10, 10)
9090
50.0
@@ -106,9 +106,42 @@ def area_triangle(base: float, height: float) -> float:
106106
return (base * height) / 2
107107

108108

109+
def area_triangle_three_sides(side1: float, side2: float, side3: float) -> float:
110+
"""
111+
Calculate area of triangle when the length of 3 sides are known.
112+
113+
This function uses Heron's formula: https://en.wikipedia.org/wiki/Heron%27s_formula
114+
115+
>>> area_triangle_three_sides(5, 12, 13)
116+
30.0
117+
>>> area_triangle_three_sides(10, 11, 12)
118+
51.521233486786784
119+
>>> area_triangle_three_sides(-1, -2, -1)
120+
Traceback (most recent call last):
121+
...
122+
ValueError: area_triangle_three_sides() only accepts non-negative values
123+
>>> area_triangle_three_sides(1, -2, 1)
124+
Traceback (most recent call last):
125+
...
126+
ValueError: area_triangle_three_sides() only accepts non-negative values
127+
"""
128+
if side1 < 0 or side2 < 0 or side3 < 0:
129+
raise ValueError("area_triangle_three_sides() only accepts non-negative values")
130+
elif side1 + side2 < side3 or side1 + side3 < side2 or side2 + side3 < side1:
131+
raise ValueError("Given three sides do not form a triangle")
132+
semi_perimeter = (side1 + side2 + side3) / 2
133+
area = sqrt(
134+
semi_perimeter
135+
* (semi_perimeter - side1)
136+
* (semi_perimeter - side2)
137+
* (semi_perimeter - side3)
138+
)
139+
return area
140+
141+
109142
def area_parallelogram(base: float, height: float) -> float:
110143
"""
111-
Calculate the area of a parallelogram
144+
Calculate the area of a parallelogram.
112145
113146
>>> area_parallelogram(10, 20)
114147
200
@@ -132,7 +165,7 @@ def area_parallelogram(base: float, height: float) -> float:
132165

133166
def area_trapezium(base1: float, base2: float, height: float) -> float:
134167
"""
135-
Calculate the area of a trapezium
168+
Calculate the area of a trapezium.
136169
137170
>>> area_trapezium(10, 20, 30)
138171
450.0
@@ -172,7 +205,7 @@ def area_trapezium(base1: float, base2: float, height: float) -> float:
172205

173206
def area_circle(radius: float) -> float:
174207
"""
175-
Calculate the area of a circle
208+
Calculate the area of a circle.
176209
177210
>>> area_circle(20)
178211
1256.6370614359173
@@ -188,7 +221,7 @@ def area_circle(radius: float) -> float:
188221

189222
def area_ellipse(radius_x: float, radius_y: float) -> float:
190223
"""
191-
Calculate the area of a ellipse
224+
Calculate the area of a ellipse.
192225
193226
>>> area_ellipse(10, 10)
194227
314.1592653589793
@@ -214,7 +247,7 @@ def area_ellipse(radius_x: float, radius_y: float) -> float:
214247

215248
def area_rhombus(diagonal_1: float, diagonal_2: float) -> float:
216249
"""
217-
Calculate the area of a rhombus
250+
Calculate the area of a rhombus.
218251
219252
>>> area_rhombus(10, 20)
220253
100.0
@@ -236,24 +269,20 @@ def area_rhombus(diagonal_1: float, diagonal_2: float) -> float:
236269
return 1 / 2 * diagonal_1 * diagonal_2
237270

238271

239-
def main():
240-
print("Areas of various geometric shapes: \n")
241-
print(f"Rectangle: {area_rectangle(10, 20)}")
242-
print(f"Square: {area_square(10)}")
243-
print(f"Triangle: {area_triangle(10, 10)}")
244-
print(f"Parallelogram: {area_parallelogram(10, 20)}")
245-
print(f"Trapezium: {area_trapezium(10, 20, 30)}")
246-
print(f"Circle: {area_circle(20)}")
247-
print("\nSurface Areas of various geometric shapes: \n")
248-
print(f"Cube: {surface_area_cube(20)}")
249-
print(f"Sphere: {surface_area_sphere(20)}")
250-
print(f"Rhombus: {area_rhombus(10, 20)}")
251-
252-
253272
if __name__ == "__main__":
254-
255273
import doctest
256274

257275
doctest.testmod(verbose=True) # verbose so we can see methods missing tests
258276

259-
main()
277+
print("[DEMO] Areas of various geometric shapes: \n")
278+
print(f"Rectangle: {area_rectangle(10, 20) = }")
279+
print(f"Square: {area_square(10) = }")
280+
print(f"Triangle: {area_triangle(10, 10) = }")
281+
print(f"Triangle: {area_triangle_three_sides(5, 12, 13) = }")
282+
print(f"Parallelogram: {area_parallelogram(10, 20) = }")
283+
print(f"Trapezium: {area_trapezium(10, 20, 30) = }")
284+
print(f"Circle: {area_circle(20) = }")
285+
print("\nSurface Areas of various geometric shapes: \n")
286+
print(f"Cube: {surface_area_cube(20) = }")
287+
print(f"Sphere: {surface_area_sphere(20) = }")
288+
print(f"Rhombus: {area_rhombus(10, 20) = }")

0 commit comments

Comments
 (0)