JAVA求三角形的面积

把描述直角坐标系上的一个点的类作为基类,派生出描述一条直线的类和描述一个三角形的类。定义成员函数求出两点间的距离和三角形的面积。

提示:先定义描述点的类Point;类Point的派生类Line为直线类,一直线有两个端点,所以它在点类的基础上新增一组点的坐标(x2,y2);三角形类 T 在直线的基础上再新增一组点的坐标 (x3,y3),求出三角形的面积。具体要求如下:

(1) 定义点类Point    int x1,y1;//保护的数据成员(点坐标)    公有构造函数Point(int a,int b): //初始化x1、y1

(2) 定义直线类Line    int x2,y2;//保护的数据成员(点坐标)。    公有构造函数Line(int a,int b,int c,int d)://初始化x2、y2,以及x1、y1

(3) 定义三角形类Triangle    int x3,y3; //私有的数据成员(点坐标)    double area; //私有的数据成员(面积)    公有构造函数Triangle(int a,int b,int c,int d,int e,int f)://初始化x3、y3,以及 x1、y1, x2、y2void f():  //求三角形面积的功能函数,先求出三条边 x、y、z,然后用以下公式求面积:s=(x+y+z)/2area= sqrt(s*(s - x)*(s - y)*(s - z))void print(): //输出三个点的坐标和面积(4) 在主函数中对该类进行测试。定义一个Triangle类的对象tri,以1和1,4和1,以及4和5作为点的坐标,完成测试工作。程序运行输出:(1,1)  (4,1)  (4,5)     area=6

/**
 * 定义一个Point类(第一个点的坐标)
 */
public class Point {
    private int x1;
    private int y1;
//无参
    public Point(){

    }
//有参
    public Point(int x1, int y1) {
        this.x1 = x1;
        this.y1 = y1;
    }
//get,set方法
    public int getX1() {
        return x1;
    }
    public void setX1(int x1) {
        this.x1 = x1;
    }

    public int getY1() {
        return y1;
    }
    public void setY1(int y1) {
        this.y1 = y1;
    }

}
/**
 * 定义一个Line类(第二个点的坐标)
 */
public class Line extends Point{
    private int x2;
    private int y2;
//无参
    public Line(){

    }
//有参
    public Line(int x1, int y1,int x2, int y2) {
        super(x1, y1);
        this.x2 = x2;
        this.y2 = y2;
    }
//get,set方法
    public int getX2() {
        return x2;
    }
    public void setX2(int x2) {
        this.x2 = x2;
    }

    public int getY2() {
        return y2;
    }
    public void setY2(int y2) {
        this.y2 = y2;
    }
}
/**
 * 定义一个Tringle类(第三个点的坐标)
 */
public class Tringle extends Line {
    private int x3;
    private int y3;
    private double area;
//无参
    public Tringle() {

    }
//有参
    public Tringle(int x1, int y1, int x2, int y2, int x3, int y3) {
        super(x1, y1, x2, y2);
        this.x3 = x3;
        this.y3 = y3;
    }
//get,set方法
    public int getX3() {
        return x3;
    }
    public void setX3(int x3) {
        this.x3 = x3;
    }

    public int getY3() {
        return y3;
    }
    public void setY3(int y3) {
        this.y3 = y3;
    }

    public double getArea() {
        return area;
    }
    public void setArea(double area) {
        this.area = area;
    }

    /**
     * 定义一个方法(先计算两点之间的距离再求面积)
     */
    public void Distance(int x1, int y1, int x2, int y2, int x3, int y3){
        Tringle tr=new Tringle();
        tr.setX1(x1);
        tr.setY1(y1);
        tr.setX2(x2);
        tr.setY2(y2);
        tr.setX3(x3);
        tr.setY3(y3);

        DecimalFormat df = new DecimalFormat("#.00");//取小数点后两位
        double x = Math.sqrt((tr.getX1() - tr.getX2()) * (tr.getX1()-tr.getX2()) + (tr.getY1() - tr.getY2()) * (tr.getY1() - tr.getY2())  );
        double y = Math.sqrt((tr.getX2() - tr.getX3()) * (tr.getX2()-tr.getX3()) + (tr.getY2() - tr.getY3()) * (tr.getY2() - tr.getY3())  );
        double z = Math.sqrt((tr.getX3() - tr.getX1()) * (tr.getX3()-tr.getX1()) + (tr.getY3() - tr.getY1()) * (tr.getY3() - tr.getY1())  );
        System.out.println("x边的长为" + df.format(x));//取小数点后两位
        System.out.println("y边的长为" + df.format(y));//取小数点后两位
        System.out.println("z边的长为" + df.format(z));//取小数点后两位
        System.out.println("第一个点的坐标为" + "(" + tr.getX1() + "," + tr.getY1() + ")");
        System.out.println("第二个点的坐标为" + "(" + tr.getX2() + "," + tr.getY2() + ")");
        System.out.println("第三个点的坐标为" + "(" + tr.getX3() + "," + tr.getY3() + ")");

        /**
         * 计算面积(边长1(x),边长2(y),边长3(z))
         */
        //海伦公式
        double p=(x+y+z)/2;//p为半周长(周长的一半)
        area=Math.sqrt(p*(p-x)*(p-y)*(p-z));//Math.sqrt()返回正确舍入的一个double值的正平方根
        System.out.println("三角形的面积为:" + df.format(area));
    }
public class area {
    public static void main(String[] args) {
        Tringle t=new Tringle();
//依次输入坐标
        t.Distance(1,1,4,1,4,5);
    }
}

运行结果:

 

猜你喜欢

转载自blog.csdn.net/qq_45609680/article/details/124384924