三角形面积:
题目描述
平面直角坐标系中有一个三角形, 请你求出它的面积。
输入描述
第一行输入一个 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)