一、问题链接
http://noi.openjudge.cn/ch0103/17/
二、问题需求
2.1 输入六个单精度浮点数,分别代表三个顶点的横坐标、纵坐标,计算并输出由这三个顶点构成的三角形面积。
三、相关知识点
序号 | 知识点列表 |
|
---|---|---|
3.1 | 高斯三角形面积公式(鞋带公式) | S △ = ( x 1 × y 2 + x 2 × y 3 + x 3 × y 1 − x 1 × y 3 − x 2 × y 1 − x 3 × y 2 ) / 2 S_△=(x_1\times y_2+x_2\times y_3+x_3\times y_1-x_1\times y_3-x_2\times y_1-x_3\times y_2){\kern 2pt}/{\kern 2pt}2 S△=(x1×y2+x2×y3+x3×y1−x1×y3−x2×y1−x3×y2)/2,其中 x 1 、 x 2 、 x 3 , y 1 、 y 2 、 y 3 x_1、x_2、x_3,y_1、y_2、y_3 x1、x2、x3,y1、y2、y3分别代表三个顶点的横坐标、纵坐标,计算结果可能为负数 |
3.2 | Math 类的abs 方法 | 计算一个数的绝对值,称为绝对值操作,返回类型取决于注入参数的类型,例如: ▲ Math.abs(-1) 得到1▲ Math.abs(1.5) 得到1.5▲ 以此类推 |
四、算法思想
4.1 定义并输入六个float
类型的浮点数x1
、y1
、x2
、y2
、x3
、y3
,分别代表三个顶点的横坐标和纵坐标;
4.2 定义float
类型的浮点数ans=Math.abs(x1*y2+x2*y3+x3*y1-x1*y3-x2*y1-x3*y2)/2
,代表三个顶点构成三角形的面积,通过"%.2f"
格式输出ans
。
五、Java程序
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
float x1 = input.nextFloat(); // 定义并输入第1个顶点的横坐标
float y1 = input.nextFloat(); // 定义并输入第1个顶点的纵坐标
float x2 = input.nextFloat(); // 定义并输入第2个顶点的横坐标
float y2 = input.nextFloat(); // 定义并输入第2个顶点的纵坐标
float x3 = input.nextFloat(); // 定义并输入第3个顶点的横坐标
float y3 = input.nextFloat(); // 定义并输入第3个顶点的纵坐标
// 利用高斯鞋带公式定义并计算三角形面积,计算结果可能为负,通过abs方法得到绝对值
float ans = Math.abs(x1 * y2 + x2 * y3 + x3 * y1 - x1 * y3 - x2 * y1 - x3 * y2) / 2;
System.out.printf("%.2f", ans); // 保留2位小数输出ans
}
}