带圆点的java swing交叉线

时间:2012-10-21 20:26:39

标签: java swing math geometry

  

可能重复:
  Circle line collision detection

我有问题。我需要找到A点。 enter image description here

我怎样才能做到最好?

编程语言是Java。

1 个答案:

答案 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]]