可能重复:
圆线碰撞检测
我有个问题。我需要找到A点。
我怎样才能做到最好?
编程语言是Java。
给定:圆心 C=[x2,y2] 和半径 R 从 C 到 B=[x1,y2] 的线段计算它们的交点。
这很容易,因为端点之一是圆的中心。您必须从 C 向 B 走 R 的距离。距离保证您最终会在圆上,方向保证您最终会在射线 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]]