如何用Python计算圆直径两端点间的圆弧中点
圆弧中点计算方法(直径两端点场景)
已知圆的半径、圆心、直径两端点p1和p2,求圆弧中点p3的步骤如下:
核心思路
因为p1和p2是直径端点,圆心O是p1p2的中点(也可直接使用给定的圆心)。圆弧中点位于垂直于p1p2的直线上,且到圆心的距离等于半径。只需计算垂直于向量$\overrightarrow{Op1}$的方向向量,再结合圆心坐标就能得到目标点p3。
具体步骤
- 确定圆心O的坐标:若未直接给定,可通过p1和p2的坐标平均得到,公式为$O_x=(p1_x+p2_x)/2$,$O_y=(p1_y+p2_y)/2$
- 计算从圆心指向p1的向量:$(p1_x - O_x, p1_y - O_y)$
- 将该向量旋转90度:顺时针旋转时$(x,y)$变为$(y,-x)$;逆时针旋转时变为$(-y,x)$,可根据需求选择对应方向
- 旋转后的向量长度等于半径,直接加上圆心坐标即可得到p3
修正后的Python代码
import math points = [[100, 200], [250, 350]] # 计算圆心(已知圆心可直接替换此处) center = ((points[0][0] + points[1][0]) / 2, (points[0][1] + points[1][1]) / 2) radius = math.sqrt(((points[1][0] - points[0][0])**2) + ((points[1][1] - points[0][1])**2)) / 2 # 圆心到p1的向量 vec_x = points[0][0] - center[0] vec_y = points[0][1] - center[1] # 逆时针旋转90度(要另一段圆弧中点则改为 (vec_y, -vec_x)) rotated_vec_x = -vec_y rotated_vec_y = vec_x # 计算圆弧中点p3 p3 = (center[0] + rotated_vec_x, center[1] + rotated_vec_y) # 按需转为整数输出 print(int(p3[0]), int(p3[1]))
补充说明
- 旋转方向决定了得到的是哪一段圆弧的中点,若结果不符合预期,切换旋转公式即可
- 若已知圆心坐标,直接替换代码中的
center变量即可,无需通过p1和p2计算
内容的提问来源于stack exchange,提问作者Baćko Kaczor
相关产品推荐
相关产品推荐

