计算三角形面积

GitHub跳转原题关系图返回列表

平移一个顶点到原点,两向量叉积绝对值的一半即三角形面积,再用 %.2f 输出,O(1) 无开方。

OJ: roj

题目 ID: 1034

难度:入门

标签:入门数学浮点数python

创建: 2026-09-29 15:03

更新: 2026-10-04 23:00

题目描述

给定平面上三角形的三个顶点 (x1,y1),(x2,y2),(x3,y3)(x_1,y_1),(x_2,y_2),(x_3,y_3),求它的面积,精确到小数点后两位。输入一行 6 个浮点数,依次为三个顶点的坐标;输出一行一个数,即三角形面积、保留两位小数。样例输入 0 0 4 0 0 3,样例输出 6.00。

思路

把顶点 AA 平移到原点,两条边向量的叉积绝对值的一半就是面积:S=∣(x2−x1)(y3−y1)−(x3−x1)(y2−y1)∣2S=\frac{|(x_2-x_1)(y_3-y_1)-(x_3-x_1)(y_2-y_1)|}{2},不用开方、没有分母。取绝对值可兼容任意顶点绕向和负坐标;输出必须用 %.2f 格式化,round() 会丢掉末尾的 0。

参考代码

Python 版:

python
#!/usr/bin/env python3
# Author by Rainboy blog: https://rainboylv.com github: https://github.com/rainboylvx
# rbook: -> https://rbook.roj.ac.cn  https://rbook2.roj.ac.cn
# rainboy的学习导航网站: https://idx.roj.ac.cn
# create_at: 2026-09-29 15:04
# update_at: 2026-09-29 15:04

import sys


def triangle_area(x1: float, y1: float, x2: float, y2: float, x3: float, y3: float) -> float:
    """以 (x1, y1) 为公共起点的两条边向量做叉积,绝对值的一半即三角形面积。"""
    return abs((x2 - x1) * (y3 - y1) - (x3 - x1) * (y2 - y1)) / 2


def solve() -> None:
    x1, y1, x2, y2, x3, y3 = map(float, sys.stdin.read().split())
    area = triangle_area(x1, y1, x2, y2, x3, y3)
    print(f"{area:.2f}")  # 固定保留两位小数,四舍五入


if __name__ == "__main__":
    solve()

C++ 版(同一算法):

cpp
/**
 * Author by Rainboy blog: https://rainboylv.com github: https://github.com/rainboylvx
 * rbook: -> https://rbook.roj.ac.cn  https://rbook2.roj.ac.cn
 * rainboy的学习导航网站: https://idx.roj.ac.cn
 * create_at: 2026-10-04 23:00
 * update_at: 2026-10-04 23:00
 */
#include <cstdio>
#include <cmath>

typedef long long ll;

double xa, ya, xb, yb, xc, yc; // 三角形三个顶点的坐标

int main() {
    scanf("%lf%lf%lf%lf%lf%lf", &xa, &ya, &xb, &yb, &xc, &yc);

    // 把顶点 A 平移到原点,两向量叉积的绝对值等于平行四边形面积,一半即三角形面积
    double cross = (xb - xa) * (yc - ya) - (xc - xa) * (yb - ya);
    double area = fabs(cross) / 2.0;

    printf("%.2f\n", area); // 固定两位小数,四舍五入并自动补 0

    return 0;
}