【JAVA 第四章 流程控制语句】课后习题 直线斜率 以及判断坐标是否在直线上点到直线的距离

不知道对不对,请教大神帮忙找下。公式是否有错

import java.util.Scanner;

public class Test {

    /*设计并实现一个MyLine 类,它表示直线。构造方法中使用两个给定的点确定直线对象
    定义一些基本方法 例如求直线的斜率 判断给定点是否在直线上 计算给定点到给定直线的距离等*/
    public static void main(String[] args) {

        //实例化一条直线
        MyLine ml = new MyLine(10,20,30,40);

        //打印直线的斜率
        ml.Slope();
        ml.pointOnSlope(40,50);
        ml.distance(20,20);



    }

}

class MyLine{
    //点一
    private double x1;
    private double y1;
    //点二
    private double x2;
    private double y2;

    private double k = 0.0;

    //两参构造方法
    public MyLine(double x1,double y1,double x2,double y2){
        this.x1 = x1;
        this.y1 = y1;
        this.x2 = x2;
        this.y2 = y2;
    }

    /*
    直线斜率定义:一由一条直线与右边X轴所成的角的正切。
    ########直线与X轴正向的夹角叫倾斜角 范围是[0,180°) 左闭右开#######
    公    式 k=(y2-y1)/(x2-x1)
    */
    public void Slope(){


        k = (y2-y1)/(x2-x1);

        if (x2 == x1){
            System.out.println("该直线与X轴垂直 没有斜率!");
        }else{
            System.out.println("该直线的斜率是:"+k);
        }

    }

    //判断给定的点是否在直线上
    /*通过判断斜率是否相等 判断是否在直线
    * ( endY - beginY ) / ( endX - beginX ) ==( Y - beginY ) / ( X - beginX )
    * 通过直线斜率 代入直线方程判断
    * 直线方程: y-beginY =k * (x - beginX)*/
    public void pointOnSlope(double x1,double y1){
        if (y1 - this.y1 == k * (x1 - this.x1)){
            System.out.println("该坐标在直线上!");
        }else{
            System.out.println("该坐标不在直线上!");
        }
    }
    //判断给定点到直线的距离
    // 求点到直线Ax + By + C = 0的距离公式为:
    //d = [AX0 + BY0 + C的绝对值]/[(A^2 + B^2)的算术平方根]
    public void distance(double x0,double y0){

        double a = y2 - y1;
        double b = x1 - x2;

        double c = (x2*y1) - (x1*y2);

        double result =0.0;

        result = Math.abs(a*x0 + b*y0 + c)/ Math.sqrt(a*a +b*b);

        System.out.println("点到直线的距离是:"+result);
    }
}


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值