@@ -201,6 +201,40 @@ def surface_area_cylinder(radius: float, height: float) -> float:
201
201
return 2 * pi * radius * (height + radius )
202
202
203
203
204
+ def surface_area_torus (torus_radius : float , tube_radius : float ) -> float :
205
+ """Calculate the Area of a Torus.
206
+ Wikipedia reference: https://en.wikipedia.org/wiki/Torus
207
+ :return 4pi^2 * torus_radius * tube_radius
208
+ >>> surface_area_torus(1, 1)
209
+ 39.47841760435743
210
+ >>> surface_area_torus(4, 3)
211
+ 473.7410112522892
212
+ >>> surface_area_torus(3, 4)
213
+ Traceback (most recent call last):
214
+ ...
215
+ ValueError: surface_area_torus() does not support spindle or self intersecting tori
216
+ >>> surface_area_torus(1.6, 1.6)
217
+ 101.06474906715503
218
+ >>> surface_area_torus(0, 0)
219
+ 0.0
220
+ >>> surface_area_torus(-1, 1)
221
+ Traceback (most recent call last):
222
+ ...
223
+ ValueError: surface_area_torus() only accepts non-negative values
224
+ >>> surface_area_torus(1, -1)
225
+ Traceback (most recent call last):
226
+ ...
227
+ ValueError: surface_area_torus() only accepts non-negative values
228
+ """
229
+ if torus_radius < 0 or tube_radius < 0 :
230
+ raise ValueError ("surface_area_torus() only accepts non-negative values" )
231
+ if torus_radius < tube_radius :
232
+ raise ValueError (
233
+ "surface_area_torus() does not support spindle or self intersecting tori"
234
+ )
235
+ return 4 * pow (pi , 2 ) * torus_radius * tube_radius
236
+
237
+
204
238
def area_rectangle (length : float , width : float ) -> float :
205
239
"""
206
240
Calculate the area of a rectangle.
@@ -543,6 +577,7 @@ def area_reg_polygon(sides: int, length: float) -> float:
543
577
print (f"Cone: { surface_area_cone (10 , 20 ) = } " )
544
578
print (f"Conical Frustum: { surface_area_conical_frustum (10 , 20 , 30 ) = } " )
545
579
print (f"Cylinder: { surface_area_cylinder (10 , 20 ) = } " )
580
+ print (f"Torus: { surface_area_torus (20 , 10 ) = } " )
546
581
print (f"Equilateral Triangle: { area_reg_polygon (3 , 10 ) = } " )
547
582
print (f"Square: { area_reg_polygon (4 , 10 ) = } " )
548
583
print (f"Reqular Pentagon: { area_reg_polygon (5 , 10 ) = } " )
0 commit comments