把描述直角坐标系上的一个点的类作为基类,派生出描述一条直线的类和描述一个三角形的类。定义成员函数求出两点间的距离和三角形的面积。
提示:先定义描述点的类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);
}
}
运行结果: