答案 0 :(得分:3)
给定: 中心C = [x2,y2]和半径R的圆 从C到B的线段= [x1,y2] 计算他们的交集。
这很容易,因为其中一个端点是圆的中心。你必须走C从C到B的距离。距离保证你将最终在圆上,方向保证你将最终在光线C-> B。您仍然需要检查交叉点是否位于段上。
如果你有一个矢量库
,这是伪代码- offset = B-C
- if length_square(offset) < R^2 output "no intersection"
- offset_a = normalize(B-C) * R
- output C + offset_a
没有库,代码更长:
- off_x = x1-x2;
- off_y = y1-y2;
- ls = off_x*off_x + off_y*off_y
- if ls < R*R
-- return an empty array, meaning "no intersections"
- scale = R / sqrt(ls)
- res_x = off_x * scale + x2
- res_y = off_y * scale + y2
- return [[off_x, off_y]]