(java)确定一条直线是否截取一个圆
所以,我需要写一个程序来决定一条直线是否截取一个圆。不需要特定的截取坐标,仅仅接触圆或与圆相切也会导致截取。如果以前有人问过我这个问题,我很抱歉,但我找不到任何适合我的问题。也许我看起来不够认真
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.");
}
}
我一直在研究另一条路线,它使用直线和圆公式而不是输入点,但它有点混乱,我不知道我要去哪里
# 1 楼答案
我们可以把直线的方程写成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)
如果我们得到:
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
让
a'=(1+m)
b'=(-2a+2cm-2dm-2bm)
c'=a^2-2cmb+2MB+mb^2+c^2-2cd+d^2-r^2
我们知道,如果
b'^2-4a'c'>;=0