所以,我需要编写一个程序来决定一条线是否拦截一个圆圈。不需要特定的拦截坐标,只是触摸圆圈或与其相切也会导致拦截。如果以前曾经问过这个问题,我会道歉,但我找不到任何适合我的问题的东西。也许我看起来不够努力。
import java.util.Scanner;
public class LineCircle_Intersection {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
double p1x, p2x, p1y, p2y, cx, cy, r;
System.out.print("Enter p1x: ");
p1x = in.nextDouble();
System.out.print("Enter p1y: ");
p1y = in.nextDouble();
System.out.print("Enter p2x: ");
p2x = in.nextDouble();
System.out.print("Enter p2y: ");
p2y = in.nextDouble();
System.out.print("Enter cx: ");
cx = in.nextDouble();
System.out.print("Enter cy: ");
cy = in.nextDouble();
System.out.print("Enter r: ");
r = in.nextDouble();
if ((p1x - cx < r) && (p1y - cy < r))
System.out.println("The line intersects the circle.");
else if ((p2x - cx < r) && (p2y - cy < r))
System.out.println("The line intersects the circle.");
else
System.out.println("The line does not intersect the circle.");
}
}
我一直在研究使用直线和圆形公式而不是输入点的替代路线,但这有点乱,我不确定我要去哪里。
答案 0 :(得分:0)
我们可以将线的等式写为y-p1y = m(x-p1x),其中m =(p2y-p1y)/(p2x-p1x)
然后y = m(x-p1x)+ p1y(1)
我们可以将圆的等式写成(x-cx)^ 2 +(y-cy)^ 2 = r ^ 2(2)
如果我们plug (1) into (2)得到:
x ^ 2(1 + m)+ x(-2a + 2cm-2dm-2bm)+ a ^ 2-2cmb + 2dmb + mb ^ 2 + c ^ 2-2cd + d ^ 2-r ^ 2 = 0
其中
a = cx
b = p1x
c = p1y
d = cy
让
一个&#39; =(1 + m)
B&#39; =( - 2A +约2cm 2DM-2BM)
C&#39; = a ^ 2-2cmb + 2dmb + mb ^ 2 + c ^ 2-2cd + d ^ 2-r ^ 2
我们知道,如果
,那条线和circurfence会相互接触B&#39; ^ 2-4A&#39; C&#39; &gt; = 0