用python求解数学题

发布时间 2023-08-03 00:13:24作者: CopyEditor

 

 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点的最短距离是: {}".format(min_distance))
48     print("F点和C点的最长距离是: {}".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()

得出结果如下: