java判断圆与直线的关系和求交点坐标

题目

1.输入一个圆的圆心坐标(x,y)半径r
2.输入一个直线的斜率k,及与直线与y轴交点纵坐标(0,b)  (要考虑k存不存的情况)   y=kx+b 斜切式  k有不存在的情况
输入一直线 ax+by+c=0,中的啊a,b,c的值  (一般式)

判断园与直线的位置关系
若直线与圆存在交点,求交点的坐标
import java.util.Scanner;
import java.lang.Math;

 public class Triangle
{
    public static void main(String[] args){
      Scanner sc = new Scanner(System.in);
      System.out.println("Enter the coordinates of the center of the circl:");
      System.out.print("Enter X:");
      double x = sc.nextDouble();
      System.out.print("Enter y:");
      double y = sc.nextDouble();
      System.out.print("input radius r:");
      double r = sc.nextDouble();
      System.out.print("Enter A:");
      double A=sc.nextDouble();
      System.out.print("Enter B:");
      double B=sc.nextDouble();
      System.out.print("Enter C:");
      double C=sc.nextDouble();

      Circle crc = new Circle(x,y,r,A,B,C);
      crc.position();
      crc.equation();



    }
    



}

class Circle{
  public Circle(double x,double y,double r,double A,double B,double C){
      this.x = x;
      this.y = y;
      this.r = r;
      this.A = A;
      this.B = B;
      this.C = C;
  }

  public double getX()
  {
    return x;
  }

  public void position(){
      double abs =Math.abs(A*x+B*y+C);
      double d=abs/Math.sqrt(A*A+B*B);
      if(d > r ){
        System.out.println("disjoint");
      }else if(d == r){
        System.out.println("Tangency"); 
      }else  if(d < r){
        System.out.println("intersect");
      }
  }

  public void equation()
  {
    if(B == 0){
      double a=1;
      double b=-2*y;
      double c=(C/A+x)*(C/A+x)+y*y-r*r;
      uqe(a,b,c);
      
    }else{
      double a =1+((A*A)/(B*B));
      double b =2*((A/B)*(C/B+y)-x);
      double c =(x*x)+(C/B+y)*(C/B+y)-r*r;
      uqe(a,b,c);
    }
    
  }

  private void uqe(double a,double b,double c)
  {
    double k=b*b-4*a*c;
    double d= Math.sqrt(k);
    double x1 = (-b+d)/2*a;
    double x2 = (-b-d)/2*a;
    double y1,y2;
    if(k<0){
      System.out.println("unsolvable");
    }else if(d == 0){
      System.out.print("only:X1="+x1); 
       y1 =  -(A*x1+C)/B;  
      System.out.println(",y1=:"+y1);  
    }else{
      System.out.print("Two solutions :");
      y1 =  -(A*x1+C)/B;  
      System.out.print("x1 = "+x1);
      System.out.println(",y1=:"+y1);  
      y2 =  -(A*x2+C)/B;  
      System.out.print("x2 = "+x2);
      System.out.print(",y2=:"+y2);  
    }
  }

  private double x;
  private double y;
  private double r;
  private double A;
  private double B;
  private double C;
}

/*
  x=0,y=0
  r=1
  A=1,B=-1,C=1  相交

*/
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值