鱼C论坛

 找回密码
 立即注册
查看: 1801|回复: 8

[已解决]代码提交后显示错误9%,感觉没有错

[复制链接]
发表于 2021-12-11 18:15:44 | 显示全部楼层
慕道子 发表于 2021-12-11 17:10
没有用公式,用的自己想的土方法,属于中学几何的切割法吧

其实我也默默关注这题,我也想知道方法,你说中学几何的切割法要切割 n <= 100 次?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-12-11 18:53:47 | 显示全部楼层
找到公式了
C 代码:
  1. #include <stdio.h>
  2. #include <stdlib.h>

  3. typedef struct{
  4.     int x, y;
  5. }point;

  6. double area(int n, point arr[]){
  7.     double res = 0;
  8.     int x, y;
  9.     for(int i = 0; i < n-1; i++){
  10.         x = arr[i].x;
  11.         y = arr[i+1].y;
  12.         res += x*y;
  13.     }
  14.     x = arr[n-1].x;
  15.     y = arr[0].y;
  16.     res += x*y;
  17.     for(int i = 0; i < n-1; i++){
  18.         x = arr[i+1].x;
  19.         y = arr[i].y;
  20.         res -= x*y;
  21.     }
  22.     x = arr[0].x;
  23.     y = arr[n-1].y;
  24.     res -= x*y;
  25.     return .5*abs(res);
  26. }

  27. int main()
  28. {
  29.     point points[7] = {{4, 2}, {2, 6}, {-2, 8}, {-6, 6}, {-8, 4}, {-6, 0}, {-2, -2}};
  30.     printf("%.2lf", area(7, points));
  31.     return 0;
  32. }
复制代码
输出结果:
  1. 74.00
复制代码



Python 代码:
  1. def area(n, arr):
  2.         res = 0
  3.         for i in range(n-1):
  4.                 x = arr[i][0]
  5.                 y = arr[i+1][1]
  6.                 res += x*y
  7.         x = arr[n-1][0]
  8.         y = arr[0][1]
  9.         res += x*y
  10.         for i in range(n-1):
  11.                 x = arr[i+1][0]
  12.                 y = arr[i][1]
  13.                 res -= x*y
  14.         x = arr[0][0]
  15.         y = arr[n-1][1]
  16.         res -= x*y
  17.         return .5*abs(res)
  18. points = [(4, 2), (2, 6), (-2, 8), (-6, 6), (-8, 4), (-6, 0), (-2, -2)]
  19. print(area(7, points))
复制代码
输出结果:
  1. 74.00
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-12-11 19:11:12 | 显示全部楼层    本楼为最佳答案   
慕道子 发表于 2021-12-11 18:59
不用切割那么多次,不是那样切割的。
就是边数为n,然后每条边作垂线,构成n个梯形(三角形也是算梯形), ...

原来是这样,受教了,谢谢你,这也是个好办法。

我是直接用数学公式计算的
Area of Polygon.jpg
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-9-27 02:34

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表