已知圆心S、半径r和角度alpha,求过圆心直线与圆的交点坐标
过圆心的直线与圆的交点坐标求解
问题描述
已知圆心坐标为 ( S(center_x, center_y) ),圆的半径为 ( r ),一条过圆心的直线由角度 ( \alpha )(与x轴正方向的夹角)定义,求该直线与圆的两个交点坐标。
解法说明
常规通用圆线交点方法(如MathWorld提及的方案)在此场景下冗余复杂,由于该直线必然经过圆心,可直接借助极坐标转直角坐标的思路简化计算:从圆心出发,沿角度 ( \alpha ) 方向延伸半径长度 ( r ) 得到第一个交点;沿相反方向(即 ( \alpha + \pi ) 角度)延伸半径长度 ( r ) 得到第二个交点。
通用公式
设圆心坐标为 ( (center_x, center_y) ),半径为 ( r ),直线角度为 ( \alpha ),则两个交点坐标为:
- 交点1:
( x_1 = center_x + r \cdot \cos(\alpha) )
( y_1 = center_y + r \cdot \sin(\alpha) ) - 交点2:
( x_2 = center_x - r \cdot \cos(\alpha) )
( y_2 = center_y - r \cdot \sin(\alpha) )
代码示例(Python)
import math def get_circle_intersections(center_x, center_y, radius, alpha): cos_val = math.cos(alpha) sin_val = math.sin(alpha) p1_x = center_x + radius * cos_val p1_y = center_y + radius * sin_val p2_x = center_x - radius * cos_val p2_y = center_y - radius * sin_val return (p1_x, p1_y), (p2_x, p2_y) # 示例调用 center = (2, 4) r = 5 angle_rad = math.pi / 4 # 45度(弧度制) point1, point2 = get_circle_intersections(*center, r, angle_rad) print(f"交点1: ({point1[0]:.2f}, {point1[1]:.2f})") print(f"交点2: ({point2[0]:.2f}, {point2[1]:.2f})")
注:角度 ( \alpha ) 的单位需与所用编程语言的三角函数要求一致,若输入为角度值,需先转换为弧度(如Python中用
math.radians(angle_deg)完成转换)
内容的提问来源于stack exchange,提问作者Miggo
相关产品推荐
相关产品推荐

