用python求解数学题
1 import math 2 import matplotlib.pyplot as plt 3 4 def generate_circle_points(center_x, center_y, radius, num_points=100): 5 points = [] 6 for i in range(num_points): 7 angle = 2 * math.pi * i / num_points 8 x = center_x + radius * math.cos(angle) 9 y = center_y + radius * math.sin(angle) 10 points.append((x, y)) 11 return points 12 13 def find_midpoint(point1, point2): 14 return ((point1[0] + point2[0]) / 2, (point1[1] + point2[1]) / 2) 15 16 def calculate_distance(point1, point2): 17 return math.sqrt((point1[0] - point2[0]) ** 2 + (point1[1] - point2[1]) ** 2) 18 19 if __name__ == "__main__": 20 # A点的坐标 21 A_x, A_y = 0, 6 22 23 # B点的坐标 24 B_x, B_y = 2 * math.sqrt(7), 0 25 26 # C点的坐标 27 C_x, C_y = 0, 0 28 29 # 以A为圆心的圆的半径 30 radius = 2 31 32 # 找出以A为圆心的圆边上的所有点D 33 D_points = generate_circle_points(A_x, A_y, radius) 34 35 # 找到B点和每个点D之间的线的中心点F 36 F_points = [find_midpoint((B_x, B_y), D) for D in D_points] 37 38 # 计算所有F点和C点之间的距离,并找到最长和最短距离 39 min_distance = float('inf') 40 max_distance = 0.0 41 for F in F_points: 42 distance = calculate_distance(F, (C_x, C_y)) 43 min_distance = min(min_distance, distance) 44 max_distance = max(max_distance, distance) 45 46 # 输出结果 47 print("F点和C点的最短距离是: {:.0f}".format(min_distance)) 48 print("F点和C点的最长距离是: {:.0f}".format(max_distance)) 49 50 # 绘制图形 51 plt.figure(figsize=(8, 8)) 52 53 # 画圆 54 circle = plt.Circle((A_x, A_y), radius, color='b', fill=False) 55 plt.gca().add_patch(circle) 56 57 # 画点A、B、C 58 plt.scatter([A_x, B_x, C_x], [A_y, B_y, C_y], c='red', label='A, B, C') 59 60 # 画点D和F 61 D_x, D_y = zip(*D_points) 62 F_x, F_y = zip(*F_points) 63 plt.scatter(D_x, D_y, c='green', label='D') 64 plt.scatter(F_x, F_y, c='orange', label='F') 65 66 # 添加标签 67 plt.text(A_x, A_y, 'A', ha='right', va='bottom') 68 plt.text(B_x, B_y, 'B', ha='right', va='bottom') 69 plt.text(C_x, C_y, 'C', ha='right', va='bottom') 70 plt.text(0, 2 * math.sqrt(7), 'D', ha='right', va='bottom') 71 plt.text(F_x[0], F_y[0], 'F', ha='right', va='bottom') 72 73 plt.xlabel('X') 74 plt.ylabel('Y') 75 plt.title('Circle with points A, B, C, D, F') 76 plt.legend() 77 78 # 设置坐标轴范围 79 plt.xlim(-5, 5) 80 plt.ylim(-5, 10) 81 82 # 显示图形 83 plt.grid() 84 plt.axhline(y=0, color='k', linewidth=0.5) 85 plt.axvline(x=0, color='k', linewidth=0.5) 86 plt.gca().set_aspect('equal', adjustable='box') 87 plt.show()
得出结果: