Java、三角形面积

该程序定义了一个方法`getTriangleArea`用于计算3*2二维数组表示的三角形面积,如果三个点共线则返回0。用户通过输入三个点的坐标,程序会显示三角形的面积。此外,还包含辅助方法`isOnTheSameLine`来检查三点是否在一条直线上,以及`getArea`用于计算面积。
摘要由CSDN通过智能技术生成

        编写一个方法,使用下面的方法头,返回一个三角形的面积:
        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;
	}
}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值