intersection.py
1 from math import sqrt, tan, pi 2 3 4 def my_round(nb: float) -> str: 5 nb_str = str(round(float(nb), 3)) 6 if nb_str[-2] == ".": 7 nb_str += "0" 8 if nb_str[-3] == ".": 9 nb_str += "0" 10 return nb_str 11 12 13 def intersection_sphere(av: list[str]) -> int: 14 r: float = int(av[8]) ** 2 15 a: float = int(av[5]) ** 2 + int(av[6]) ** 2 + int(av[7]) ** 2 16 if a == 0: 17 print("There is an infinite number of intersection points.") 18 return 0 19 b: float = ( 20 (2 * int(av[5]) * int(av[2])) 21 + (2 * int(av[6]) * int(av[3])) 22 + (2 * int(av[7]) * int(av[4])) 23 ) 24 c: float = int(av[2]) ** 2 + int(av[3]) ** 2 + int(av[4]) ** 2 - r 25 delta: float = b ** 2 - 4 * a * c 26 if delta < 0: 27 print("No intersection point.") 28 elif delta == 0: 29 print("1 intersection point:") 30 x0: float = -(b / (2 * a)) 31 print( 32 f"({my_round((int(av[5]) * x0) + int(av[2]))}, {my_round((int(av[6]) * x0) + int(av[3]))}, {my_round((int(av[7]) * x0) + int(av[4]))})" 33 ) 34 else: 35 print("2 intersection points:") 36 x1: float = -(b - sqrt(delta)) / (2 * a) 37 x2: float = -(b + sqrt(delta)) / (2 * a) 38 print( 39 f"({my_round((int(av[5]) * x1) + int(av[2]))}, {my_round((int(av[6]) * x1) + int(av[3]))}, {my_round((int(av[7]) * x1) + int(av[4]))})" 40 ) 41 print( 42 f"({my_round((int(av[5]) * x2) + int(av[2]))}, {my_round((int(av[6]) * x2) + int(av[3]))}, {my_round((int(av[7]) * x2) + int(av[4]))})" 43 ) 44 return 0 45 46 47 def intersection_cylinder(av: list[str]) -> int: 48 r: float = int(av[8]) ** 2 49 a: float = int(av[5]) ** 2 + int(av[6]) ** 2 50 if a == 0: 51 print("There is an infinite number of intersection points.") 52 return 0 53 b: float = (2 * int(av[5]) * int(av[2])) + (2 * int(av[6]) * int(av[3])) 54 c: float = int(av[2]) ** 2 + int(av[3]) ** 2 - r 55 delta: float = b ** 2 - 4 * a * c 56 if delta < 0: 57 print("No intersection point.") 58 elif delta == 0: 59 print("1 intersection point:") 60 x0: float = -(b / (2 * a)) 61 print( 62 f"({my_round((int(av[5]) * x0) + int(av[2]))}, {my_round((int(av[6]) * x0) + int(av[3]))}, {my_round((int(av[7]) * x0) + int(av[4]))})" 63 ) 64 else: 65 print("2 intersection points:") 66 x1: float = -(b - sqrt(delta)) / (2 * a) 67 x2: float = -(b + sqrt(delta)) / (2 * a) 68 print( 69 f"({my_round((int(av[5]) * x1) + int(av[2]))}, {my_round((int(av[6]) * x1) + int(av[3]))}, {my_round((int(av[7]) * x1) + int(av[4]))})" 70 ) 71 print( 72 f"({my_round((int(av[5]) * x2) + int(av[2]))}, {my_round((int(av[6]) * x2) + int(av[3]))}, {my_round((int(av[7]) * x2) + int(av[4]))})" 73 ) 74 return 0 75 76 77 def intersection_cone(av: list[str]) -> int: 78 angle: float = tan((pi / 2) - (int(av[8]) * pi / 180)) ** 2 79 a: float = angle * (int(av[5]) ** 2 + int(av[6]) ** 2) - int(av[7]) ** 2 80 if a == 0: 81 print("There is an infinite number of intersection points.") 82 return 0 83 b: float = angle * (2 * int(av[2]) * int(av[5]) + 2 * int(av[3]) * int(av[6])) - ( 84 2 * int(av[4]) * int(av[7]) 85 ) 86 c: float = angle * (int(av[2]) ** 2 + int(av[3]) ** 2) - int(av[4]) ** 2 87 delta: float = b ** 2 - 4 * a * c 88 if delta < 0: 89 print("No intersection point.") 90 elif delta == 0: 91 print("1 intersection point:") 92 x0: float = -(b / (2 * a)) 93 print( 94 f"({my_round((int(av[5]) * x0) + int(av[2]))}, {my_round((int(av[6]) * x0) + int(av[3]))}, {my_round((int(av[7]) * x0) + int(av[4]))})" 95 ) 96 else: 97 print("2 intersection points:") 98 x1: float = -(b - sqrt(delta)) / (2 * a) 99 x2: float = -(b + sqrt(delta)) / (2 * a) 100 print( 101 f"({my_round((int(av[5]) * x1) + int(av[2]))}, {my_round((int(av[6]) * x1) + int(av[3]))}, {my_round((int(av[7]) * x1) + int(av[4]))})" 102 ) 103 print( 104 f"({my_round((int(av[5]) * x2) + int(av[2]))}, {my_round((int(av[6]) * x2) + int(av[3]))}, {my_round((int(av[7]) * x2) + int(av[4]))})" 105 ) 106 return 0