关于我们

质量为本、客户为根、勇于拼搏、务实创新

< 返回新闻公共列表

三角形的面积-叉积

发布时间:2023-06-27 15:01:15

三角形面积:


题目描述

平面直角坐标系中有一个三角形, 请你求出它的面积。

输入描述

第一行输入一个 TT ,代表测试数据量

每组测试数据输入有三行,每行一个实数坐标 (x, y)(x,y) 代表三角形三个顶点。

1≤T≤10^3,−10^5≤x,y≤10^5

输出描述

输出一个实数表示三角形面积。结果保留2位小数,误差不超过 10^{-2}10−2

输入输出样例

示例 1

输入

2

0 1

1 0

1 1

0 0

1 1

2 2

输出

0.50

0.00

运行限制

最大运行时间:1s

最大运行内存: 256M


思路


A×B 的几何意义为向量 A和 B 形成的平行四边形的“有向”面积,这个面积是有正负的。叉积的正负符合“右手定则”,可以用下图中的正负情况帮助理解。

叉积的计算方法:

1. def cross(a, b): 2. return a.x * b.y - a.y * b.x

   

其中a,b是创建的点类,即(x,y)

我们只需要输入三个点,计算出两条边的向量,再求出叉积的绝对值,再将绝对值乘以1/2,就得到了我们要求的三角形的面积


代码:


1. class point(): 2. def __init__(self,x=0,y=0): 3. self.x=x 4. self.y=y 5. 6. def cross(a,b): 7. return a.x*b.y-a.y*b.x 8. 9. def area(p1,p2,p3): 10. a=point() 11. b=point() 12. a.x=p1.x-p2.x 13. a.y=p1.y-p2.y 14. b.x=p3.x-p2.x 15. b.y=p3.y-p2.y 16. ans=abs(cross(a,b))/2 17. print("%.2f"%ans) 18. 19. cnt=int(input()) 20. p1=point() 21. p2=point() 22. p3=point() 23. for i in range(cnt): 24. p1.x,p1.y=map(int,input().split()) 25. p2.x,p2.y=map(int,input().split()) 26. p3.x,p3.y=map(int,input().split()) 27. area(p1, p2, p3)

/template/Home/leiyu/PC/Static