编写一个方法,使用下面的方法头,返回一个三角形的面积:
public static double getTriangleArea(double[][] points)
点保存在3 * 2的二维数组points中,三角形面积计算可以使用编程练习题2.19中公式,如果三个点在一条直线上方法返回0。编写一个程序,提示用户输入三角形的三个点,然后显示三角形的面积。
package pack2;
import java.util.Scanner;
import javafx.geometry.Point2D;
public class AreaOfTriangle {
public static void main(String[] args) {
areaOfTriangle();
}
// 2.5 2 5 -1.0 4.0 2.0
// 2 2 4.5 4.5 6 6
public static void areaOfTriangle() {
try(Scanner input = new Scanner(System.in);) {
final int ROW = 3, COLUMN = 2;
double[][] points = new double[ROW][COLUMN];
System.out.print("Enter x1, y1, x2, y2, x3, y3: ");
inputData(input, points);
double area = getTriangleArea(points);
if(Math.abs(area) < 0.0001)
System.out.println("The three points are on the same line");
else
System.out.printf("The area of the triangle is %.2f\n", area);
}
}
/**接收数据输入*/
public static void inputData(Scanner input, double[][] points) {
for (int i = 0; i < points.length; i++)
for (int j = 0; j < points[i].length; j++)
points[i][j] = input.nextDouble();
}
/**三角形面积*/
public static double getTriangleArea(double[][] points) {
Point2D[] point = new Point2D[3]; //Point2D类数组
for (int i = 0; i < point.length; i++) //依次创建Point2D对象
point[i] = new Point2D(points[i][0], points[i][1]);
return isOnTheSameLine(point[0], point[1], point[2]) ? 0 : getArea(point);
}
/**获取面积*/
private static double getArea(Point2D...points) {
double side1 = points[0].distance(points[1]);
double side2 = points[0].distance(points[points.length - 1]);
double side3 = points[1].distance(points[points.length - 1]);
double s = (side1 + side2 + side3) / 2;
return Math.sqrt(s * (s - side1) * (s - side2) * (s - side3));
}
/**三点在同一直线上?*/
public static boolean isOnTheSameLine(Point2D p1, Point2D p2, Point2D p0) {
double k = (p1.getX() - p0.getX()) * (p2.getY() - p0.getY()) -
(p2.getX() - p0.getX()) * (p1.getY() - p0.getY());
return Math.abs(k) < 0.00001;
}
}