有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

(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) 个答案

  1. # 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