求解三角形面积有很多的方法,海伦公式是常见的求面积公式,下面从一道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.程序运行及结果分析