求解三角形面積有很多的方法,海倫公式是常見的求面積公式,下面從一道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.程序運行及結果分析