平面切分
![](https://i-blog.csdnimg.cn/blog_migrate/a05e3a6f94a4d755499779b32f21e7cb.png)
import os
import sys
# 请在此输入您的代码
n = int(input())
if n == 0:
print(1)
a_02 = []
for i in range(n):
a_01 = list(map(int,input().split()))
if a_01 not in a_02:
a_02.append(a_01)
ChuShi = 1
for i in range(0,len(a_02)):
a_01 = a_02[i]
JiaoDian =[]
for j in range(i):
if(a_01[0] != a_02[j][0]):
x = (a_01[1] - a_02[j][1]) / (a_01[0] - a_02[j][0])
y = x*a_01[0] + a_01[1]
tp = [x,y]
if tp not in JiaoDian:
JiaoDian.append(tp)
ChuShi += 1 + len(JiaoDian)
print(ChuShi)
![](https://i-blog.csdnimg.cn/blog_migrate/b2ff2e4893acc3d31ae3c9b4db3cd5c1.jpeg)
思路:
这题非常需要自己画图找规律,从0条线分析到3条线大概规律就能找到了。
分析线的数量和新增线与前面所有线产生交点
分析规律:设平面数为s
当0条线时:
s = 1
当1条线时:
s = 2
当2条线时:分两种情况
①两条线平行
s = 2 + 1 =》 在原来一条线的基础上加一条线,平面数 +1
②两条线相交
s = 2 + 1 + 1 =》 在原来一条线的基础上加一条线,平面数 +1,新加的线与原来的一条线产生一个新交点,平面数 + 1
当3条线时:分三种情况
①三条线平行
s = 3 + 1=》 在原来两条线的基础上加一条线,平面数 +1
②第三条线与前面两条线相交于同一个交点
s = 3 + 1 + 1 + 1=》 在原来两条线的基础上加一条线,平面数 +1,原来有一个交点平面数+ 1,新加的线与原来两条线交于同一个交点,平面数 + 1
③第三条线在两条线产生新的两个交点
s = 3 + 1 + 1 + 2=》在原来两条线的基础上加一条线,平面数 +1,原来有一个交点,平面数+ 1,新加的线与原来两条线交于两个新交点,平面数 + 2
分析规律时要遵守一个原则,一次新增一条线,新增的线之和前面存在的线有关
现在我们找到如下规律:新增一条线,必定新增一个平面,再对新线与旧线进行位置分析,如果产生新交点,产生N个新交点,平面数再加N,如果与旧线产生的交点重叠,则平面数只加一。
思路理清楚了,开始编码,首先要把所有输入的斜率截距对(简称斜截对)存在一个列表中,这里要注意一个小点,为了防止两组重复的斜截对,我设置了一个if判断。
创建一个变量“ChuShi”存0条直线时平面的数量。
创建一个两层循环,第一层循环作用是为了实现“一条一条直线逐步去切割平面”,第二层循环作用是为了控制“新增直线之和前面存在的直线做位置比较”。
交点座标的求法套用“两点式公式”。