zoukankan      html  css  js  c++  java
  • 从求解三角形面积的海伦公式说起

    求解三角形面积有很多的方法,海伦公式是常见的求面积公式,下面从一道Java编程题说起:

    0.海伦公式背景介绍:

           

            

                 

                 

    1.海伦公式求解三角形面积

     1 package com.neusoft.chapter2.exercise;
     2 
     3 import java.util.Scanner;
     4 
     5 /**
     6  * @author zhao-chj
     7  * 海伦公式求解三角形面积
     8  * 1.用户输入三角形的三个点A(x1,y1),B(x2,y2),C(x3,y3)
     9  * 2.求解三角形的三条边
    10  * distance(A,B)=sqrt(pow((x2-x1),2)+pow((y2-y1),2)  边1
    11  * distance(A,C)=sqrt(pow((x2-x3),2)+pow((y2-y3),2)  边2
    12  * distance(B,C)=sqrt(pow((x2-x3),2)+pow((y2-y3),2)  边3
    13  * 2.根据海伦公式得到三角形的面积
    14  *   s=(边1+边2+边3)/2
    15  *   Area=sqrt(s(s-边1)(s-边2)(s-边3))
    16  * 4.输出三角形的面积
    17  */
    18 public class Exercise19 {
    19     public static void main(String[] args) {
    20         System.out.println("****请您输入三角形的三点坐标****");
    21         Scanner sc = new Scanner(System.in);
    22         System.out.println("输入A点坐标(x1,y1)");
    23         double x1 = sc.nextDouble();
    24         double y1 = sc.nextDouble();
    25         System.out.println("输入B点坐标(x2,y2)");
    26         double x2 = sc.nextDouble();
    27         double y2 = sc.nextDouble();
    28         System.out.println("输入C点坐标(x3,y3)");
    29         double x3 = sc.nextDouble();
    30         double y3 = sc.nextDouble();
    31         //1.计算边长
    32         //distance(A,B)=sqrt(pow((x2-x1),2)+pow((y2-y1),2)  边1
    33         double side1AB=Math.sqrt(Math.pow((x2-x1),2)+Math.pow((y2-y1),2));
    34         //计算第二个 边的 边长
    35         double side2AC=Math.pow((x3-x1)*(x3-x1)+(y3-y1)*(y3-y1),0.5);
    36         //计算第三个 边的 边长
    37         double side2BC=Math.pow((x3-x2)*(x3-x2)+(y3-y2)*(y3-y2),0.5);
    38         //2.海伦公式
    39         double s= (side1AB+side2AC+side2BC)/2;
    40         double Area=Math.pow(s*(s-side1AB)*(s-side2AC)*(s-side2BC), 0.5);
    41         //3.输出三角形的面积公式
    42         System.out.println("用海伦公式得到三角形的面积为:"+Area);
    43         
    44     }
    45 }

    2.抽象其中求解三角形边长的方法和求解面积的方法重新实现海伦公式求解

     1 package com.neusoft.chapter2.exercise;
     2 import java.util.Scanner;
     3 /**
     4  * @author zhao-chj
     5  * 海伦公式求解三角形面积
     6  * 1.用户输入三角形的三个点A(x1,y1),B(x2,y2),C(x3,y3)
     7  * 2.求解三角形的三条边
     8  * distance(A,B)=sqrt(pow((x2-x1),2)+pow((y2-y1),2)  边1
     9  * distance(A,C)=sqrt(pow((x2-x3),2)+pow((y2-y3),2)  边2
    10  * distance(B,C)=sqrt(pow((x2-x3),2)+pow((y2-y3),2)  边3
    11  * 2.根据海伦公式得到三角形的面积
    12  *   s=(边1+边2+边3)/2
    13  *   Area=sqrt(s(s-边1)(s-边2)(s-边3))
    14  * 4.输出三角形的面积
    15  */
    16 public class Exercise19_1 {
    17     public static void main(String[] args) {
    18         System.out.println("****请您输入三角形的三点坐标****");
    19         Scanner sc = new Scanner(System.in);
    20         System.out.println("输入A点坐标(x1,y1)");
    21         double x1 = sc.nextDouble();
    22         double y1 = sc.nextDouble();
    23         System.out.println("输入B点坐标(x2,y2)");
    24         double x2 = sc.nextDouble();
    25         double y2 = sc.nextDouble();
    26         System.out.println("输入C点坐标(x3,y3)");
    27         double x3 = sc.nextDouble();
    28         double y3 = sc.nextDouble();
    29         //1.计算边长
    30         //distance(A,B)=sqrt(pow((x2-x1),2)+pow((y2-y1),2)  边1
    31         double side1AB=SloveSide(x1, x2, y1, y2);
    32         //2.计算第二个 边的 边长
    33         double side2AC=SloveSide(x1, x3, y1, y3);
    34         //3.计算第三个 边的 边长
    35         double side2BC=SloveSide(x2, x3, y2, y3);
    36         //4.调用求解面积的方法解决上述问题
    37         double Area= SloveArea(side1AB, side2AC, side2BC);
    38         System.out.println("用海伦公式得到三角形的面积为:"+Area);
    39     }
    40 
    41     private static double  SloveArea(double side1AB, double side2AC, double side2BC) {
    42         //2.海伦公式
    43         double s= (side1AB+side2AC+side2BC)/2;
    44         double Area=Math.pow(s*(s-side1AB)*(s-side2AC)*(s-side2BC), 0.5);
    45         //3.输出三角形的面积公式
    46         return Area;
    47     }
    48 
    49     private static double SloveSide(double x1,double x2,double y1,double y2) {
    50         // TODO 封装上述面积求解为一个方法
    51         double side=Math.sqrt(Math.pow((x2-x1),2)+Math.pow((y2-y1),2));
    52         return side;
    53     }
    54 }

    3.程序运行及结果分析

          

  • 相关阅读:
    18.9.22 noip模拟赛
    POJ 2299 Ultra-QuickSort
    美团2018年CodeM大赛-初赛B轮 B 配送(最短路)
    Wannafly挑战赛18 E 极差(线段树、单调栈)
    Foj 2299 Prefix(AC自动机、DP)
    求独立矩形个数
    Zoj 3777 Problem Arrangement
    Luogu 2444 [POI2000]病毒 & Zoj 3784
    [ZJOI2007]Hide 捉迷藏
    双联通分量学习笔记
  • 原文地址:https://www.cnblogs.com/jackchen-Net/p/6597604.html
Copyright © 2011-2022 走看看