计算n边形的面积
本帖最后由 无理想的闲鱼 于 2022-11-15 22:56 编辑题目描述
给出一个简单多边形(没有缺口),它的边要么是垂直的,要么是水平的。要求计算多边形的面积。 多边形被放置在一个 X-Y 的卡笛尔平面上,它所有的边都平行于两条坐标轴之一。然后按逆时针方向给出各顶点的坐标值。所有的坐标值都是整数(因此多边形的面积也为整数)。
输入描述:
第一行给出多边形的顶点数 n(n≤100) 。接下来的几行每行给出多边形一个顶点的坐标值 X 和 Y (都为整数并且用空格隔开)。顶点按逆时针方向逐个给出。并且多边形的每一个顶点的坐标值 -200≤x,y≤200 。多边形最后是靠从最后一个顶点到第一个顶点画一条边来封闭的。
输出描述:
一个整数,表示多边形的面积。
示例
示例1
输入
10
0 0
4 0
4 1
3 1
3 3
2 3
2 2
1 2
1 3
0 3
输出
9
n = int(input()) #把n边形分成n-1个三角形来计算面积
S = 0 #面积
list1 = [] #存放点的坐标
for j in range(n):
a = input()
a = a.split()
list1.append(a)
#下面是找中心点
x_MAX = int(list1)
y_MAX = int(list1)
x_MIN = int(list1)
y_MIN = int(list1)
for m in range(1,n):
if int(list1) > x_MAX:
x_MAX = int(list1)
if int(list1) < x_MIN:
x_MIN = int(list1)
if int(list1) > y_MAX:
y_MAX = int(list1)
if int(list1) < y_MIN:
y_MIN = int(list1)
x1 = (x_MAX + x_MIN) / 2
y1 = (y_MAX + y_MIN) / 2
for k in range(n-1):
#起始点算0,到倒数第二的点,如果n是14,n-1是13,循环就是0-12(13个数)
x2 = int(list1)
y2 = int(list1)
x3 = int(list1)
y3 = int(list1)
if x2 == x3:
S += ((abs(y3 - y2))*(abs(x2 - x1))) / 2
if y2 == y3:
S += ((abs(x3 - x2))*(abs(y2 - y1))) / 2
#计算最后一个三角形的面积
x2 = int(list1)
y2 = int(list1)
x3 = int(list1)
y3 = int(list1)
if x2 == x3:
S += ((abs(y3 - y2))*(abs(x2 - x1))) / 2
if y2 == y3:
S += ((abs(x3 - x2))*(abs(y2 - y1))) / 2
print(S)
我不知道自己错在哪里了?
我的想法是找到中点,把n边形分为n-1个三角形,再求这些三角形总面积之和
本帖最后由 柿子饼同学 于 2022-11-14 21:52 编辑
其实 , 这题给了所有点的坐标 , 就可以用鞋带定理的
这样就简单了
https://www.bilibili.com/video/BV1M5411U7SB/?share_source=copy_web&vd_source=a9cc3d08b88ba606a55323168cb1deb0
而您的方法可能不适用于凹的图形 我看不懂代码(可能是我数学不好{:10_266:})
请允许我在没有看完代码的情况下问一个问题:如果出现下面这种情况的多边形,这个程序有没有可能会出 bug? tommyyu 发表于 2022-11-14 16:03
我看不懂代码(可能是我数学不好)
请允许我在没有看完代码的情况下问一个问题:如果出现下面 ...
那这样呢
楼主说的应该是正多边形 三体—夜航星 发表于 2022-11-15 22:34
楼主说的应该是正多边形
不是正多边形呢,但是n边形的边是水平或者是垂直的呢 tommyyu 发表于 2022-11-14 16:03
我看不懂代码(可能是我数学不好)
请允许我在没有看完代码的情况下问一个问题:如果出现下面 ...
如果图形是这个、那就会出现bug{:10_262:} wp231957 发表于 2022-11-14 16:28
那这样呢
你们脑洞可以哦、
我都没想到这么复杂的呢{:10_262:}
谢谢你们、我的思维被打开了{:10_275:}
页:
[1]