无理想的闲鱼 发表于 2022-11-14 13:29:28

计算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 13:29:29

本帖最后由 柿子饼同学 于 2022-11-14 21:52 编辑

其实 , 这题给了所有点的坐标 , 就可以用鞋带定理的
这样就简单了
https://www.bilibili.com/video/BV1M5411U7SB/?share_source=copy_web&vd_source=a9cc3d08b88ba606a55323168cb1deb0
而您的方法可能不适用于凹的图形

tommyyu 发表于 2022-11-14 16:03:32

我看不懂代码(可能是我数学不好{:10_266:})

请允许我在没有看完代码的情况下问一个问题:如果出现下面这种情况的多边形,这个程序有没有可能会出 bug?

wp231957 发表于 2022-11-14 16:28:05

tommyyu 发表于 2022-11-14 16:03
我看不懂代码(可能是我数学不好)

请允许我在没有看完代码的情况下问一个问题:如果出现下面 ...

那这样呢

三体—夜航星 发表于 2022-11-15 22:34:39

楼主说的应该是正多边形

无理想的闲鱼 发表于 2022-11-15 22:54:08

三体—夜航星 发表于 2022-11-15 22:34
楼主说的应该是正多边形

不是正多边形呢,但是n边形的边是水平或者是垂直的呢

无理想的闲鱼 发表于 2022-11-15 22:57:34

tommyyu 发表于 2022-11-14 16:03
我看不懂代码(可能是我数学不好)

请允许我在没有看完代码的情况下问一个问题:如果出现下面 ...

如果图形是这个、那就会出现bug{:10_262:}

无理想的闲鱼 发表于 2022-11-15 23:02:08

wp231957 发表于 2022-11-14 16:28
那这样呢

你们脑洞可以哦、
我都没想到这么复杂的呢{:10_262:}
谢谢你们、我的思维被打开了{:10_275:}
页: [1]
查看完整版本: 计算n边形的面积