关于我们

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

< 返回新闻公共列表

平面几何-python

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

三角形面积:


题目描述

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

输入描述

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

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

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

输出描述

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

输入输出样例

示例 1

输入


1. 2 2. 0 1 3. 1 0 4. 1 1 5. 0 0 6. 1 1 7. 2 2

   

输出

1. 0.50 2. 0.00

   


运行限制

  • 最大运行时间:1s
  • 最大运行内存: 256M


思路:


我们这里介绍一个计算三角形面积的公式,海伦公式介绍

公式表述

海伦公式:

假设在平面内,有一个三角形,边长分别为a、b、c,三角形的面积S可由以下公式求得:

                                               S=√p(p-a)(p-b)(p-c)

而公式里的p为半周长(周长的一半):

                                                p=(a+b+c)/2

题目中给了我们三角形的三个点的坐标,我们可以通过勾股定理计算各个边的长度,在带入海伦公式计算即可

由于本题要求高精度,python浮点数是64位的,存在误差,大致理解思路即可



代码:


1. from math import* 2. 3. def Dist(x1,x2,y1,y2): 4. return sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)) 5. 6. t = int(input()) 7. for i in range(t): 8. x1,y1=map(float,input().split()) 9. x2,y2=map(float,input().split()) 10. x3,y3=map(float,input().split()) 11. a=Dist(x1, x2, y1, y2) 12. b=Dist(x3, x2, y3, y2) 13. c=Dist(x1, x3, y1, y3) 14. p=(a+b+c)/2 15. s=sqrt(p*(p-a)*(p-b)*(p-c)) 16. print("{:.2f}".format(s))

   

平面切分


【问题描述】

平面上有 N 条直线,其中第 i 条直线是 y = Ai · x + Bi。

请计算这些直线将平面分成了几个部分。

【输入格式】

第一行包含一个整数 N。

以下 N 行,每行包含两个整数 Ai, Bi。

【输出格式】

一个整数代表答案。

【样例输入】

3

1 1

2 2

3 3

【样例输出】

6

【评测用例规模与约定】

对于 50% 的评测用例,1 ≤ N ≤ 4, 10 ≤ Ai, Bi ≤ 10。

对于所有评测用例,1 ≤ N ≤ 1000, 100000 ≤ Ai, Bi ≤ 100000。

思路


我们先读取数据n,再将每组线存入元组列表当中,使用set()来对重复的线段进行去重。

之后遍历所有的线段,并将当前线段与它之前的线段的交点找出来,存到set()创建的无序不重复元素集p中,确保每个交点都是不同的。

我们为什么要寻找线与线之间的交点呢?因为我们发现,每增加一条线,如果它和之前的线有n个交点,那么总的分割的区域就要增加n+1个。这也体现在我们的代码中

代码


1. n=eval(input()) 2. line=[tuple(map(int,input().split())) for i in range(n)] 3. s=set(line) 4. line=list(s) 5. ans=2 6. for i in range(1,len(line)): 7. a1,b1=line[i] 8. pos=set() 9. for j in range(i): 10. a2,b2=line[j] 11. if a1==a2: 12. continue 13. x=(b1-b2)/(a1-a2) 14. y=a1*x+b1 15. pos.add((x,y)) 16. ans+=len(pos)+1 17. print(ans)

/template/Home/leiyu/PC/Static