三角形面积:
题目描述 平面直角坐标系中有一个三角形, 请你求出它的面积。
输入描述 第一行输入一个 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 形成的平行四边形的“有向”面积,这个面积是有正负的。叉积的正负符合“右手定则”,可以用下图中的正负情况帮助理解。
叉积的计算方法:
def cross(a, b):
return a.x * b.y - a.y * b.x
其中a,b是创建的点类,即(x,y)
我们只需要输入三个点,计算出两条边的向量,再求出叉积的绝对值,再将绝对值乘以1/2,就得到了我们要求的三角形的面积
代码:
class point():
def __init__(self,x=0,y=0):
self.x=x
self.y=y
def cross(a,b):
return a.x*b.y-a.y*b.x
def area(p1,p2,p3):
a=point()
b=point()
a.x=p1.x-p2.x
a.y=p1.y-p2.y
b.x=p3.x-p2.x
b.y=p3.y-p2.y
ans=abs(cross(a,b))/2
print("%.2f"%ans)
cnt=int(input())
p1=point()
p2=point()
p3=point()
for i in range(cnt):
p1.x,p1.y=map(int,input().split())
p2.x,p2.y=map(int,input().split())
p3.x,p3.y=map(int,input().split())
area(p1, p2, p3)
|