(java)确定一条线是否拦截一个圆圈

时间:2016-09-22 01:11:37

标签: 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 个答案:

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