2

可能重复:
圆线碰撞检测

我有个问题。我需要找到A点。 在此处输入图像描述

我怎样才能做到最好?

编程语言是Java。

4

1 回答 1

4

给定:圆心 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]]
于 2012-10-21T20:46:54.753 回答