行列式求三角形以及任何四边形周长和面积


> 求任意三角形和四边形的面积都可以用行列式来求,其他几边形也都可以,这里就不多写了。(this is my first 博客。目前还很菜)

在这里插入代码片
```package 求面积;//(如果父类中有与子类相同的方法,那么子类向上转型之后,用对象的引用可以调用子类中的方法。但是如果父类中没有和子类相同的方法,则无法调用子类中的方法。
import java.util.Scanner;
public class Main {
 static Scanner cin=new Scanner(System.in);
 public static void main(String[] args)
 {
  while(cin.hasNext()) {
   int x=cin.nextInt();
   if(x==1) {
    Triangle t=new Triangle();
    t.p=new Point[3];//记得对象数组,要对每个对象都实例化。
    for(int i=0;i<3;i++) {
     t.p[i]=new Point();
     t.p[i].x=cin.nextDouble();
     t.p[i].y=cin.nextDouble();
    }
    System.out.printf("这是一个三角形,周长为:%.1f,面积为%.1f.\n",t.perimeter(t),t.area(t));
   }
   if(x==2) {
    Rectangle t=new Rectangle();
    t.p=new Point[4];
    mpoint(t);//每个都有,直接写成方法来调用。
    System.out.printf("这是一个矩形,周长为:%.1f,面积为%.1f.\n",t.perimeter(t),t.area(t));
   }
   if(x==3) {
    Trapezoid t=new Trapezoid();
    t.p=new Point[4];
    mpoint(t);
    System.out.printf("这是一个梯形,周长为:%.1f,面积为%.1f.\n",t.perimeter(t),t.area(t));
   }
   if(x==4) {
    Rhomboid t=new Rhomboid();
    t.p=new Point[4];
    mpoint(t);
    System.out.printf("这是一个平行四边形,周长为:%.1f,面积为%.1f.\n",t.perimeter(t),t.area(t));
   }
 
   if(x==5) {
    Diamond t=new Diamond();
    t.p=new Point[4];
    mpoint(t);
    System.out.printf("这是一个菱形,周长为:%.1f,面积为%.1f.\n",t.perimeter(t),t.area(t));
   }
  }
 }
 public static void mpoint(Playgon t) {
  for(int i=0;i<4;i++) {
   t.p[i]=new Point();
   t.p[i].x=cin.nextDouble();
   t.p[i].y=cin.nextDouble();
  }
 }
}
class Point{
 double x,y;
 public Point() {
  super();
 }
 public double distance(Point p1,Point p2) {
  double distance;
  distance =Math.sqrt( Math.pow((p1.x-p2.x),2)+ Math.pow((p1.y-p2.y),2));
  return distance;
 }
}
class Playgon{
 Point p[];
 public Playgon() {
  
 }
}
class Triangle extends Playgon{
 public Triangle() {
  super();
 }
 public double perimeter(Triangle t) {
  double l=0;
  l=t.p[0].distance(t.p[0], t.p[1])+new Point().distance(t.p[1], t.p[2])+new Point().distance(t.p[0],t.p[2]);
  return l;
 }
 public double area(Triangle t) {
  double s=0; 
  for(int i=0;i<3;i++) {
   if(i==2) {
    s=s+t.p[i].x*t.p[0].y-t.p[0].x*t.p[i].y;
   }
   else {
    s=s+t.p[i].x*t.p[i+1].y-t.p[i+1].x*t.p[i].y;
   }
  }
  return s/2;//行列式啊求三角形面积。
 }
}
class Rectangle extends Playgon{
 public Rectangle() {
  super();
 } 
 public double perimeter(Rectangle t) {
  double l=0;
  l=new Point().distance(t.p[0], t.p[1])+new Point().distance(t.p[1], t.p[2])+new Point().distance(t.p[2], t.p[3])+new Point().distance(t.p[3], t.p[0]);//四边形周长,四个边相加,通用。
  return l;
 }
 public double area(Rectangle t) {
  double s=0;
  for(int i=0;i<4;i++) {
   if(i==3) {
    s=s+t.p[i].x*t.p[0].y-t.p[0].x*t.p[i].y;
   }
   else {
    s=s+t.p[i].x*t.p[i+1].y-t.p[i+1].x*t.p[i].y;
   }
  }
  return s/2;//行列式求四边形面积。(通用)。
 }
}
class Trapezoid extends Rectangle{
 public Trapezoid() {
  super();
 } 
}
class Rhomboid extends Trapezoid{
 public Rhomboid() {
  super();
 }
}
class Diamond extends Rhomboid{//由于类中的方法一样,可以连续继承。
 public Diamond() {
  super();
 }
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值