求解三角形面积有很多的方法,海伦公式是常见的求面积公式,下面从一道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) 边111 * distance(A,C)=sqrt(pow((x2-x3),2)+pow((y2-y3),2) 边212 * distance(B,C)=sqrt(pow((x2-x3),2)+pow((y2-y3),2) 边313 * 2.根据海伦公式得到三角形的面积14 * s=(边1+边2+边3)/215 * 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) 边133 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) 边210 * distance(B,C)=sqrt(pow((x2-x3),2)+pow((y2-y3),2) 边311 * 2.根据海伦公式得到三角形的面积12 * s=(边1+边2+边3)/213 * 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) 边131 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.程序运行及结果分析