首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C中直线多边形面积的计算

C中直线多边形面积的计算
EN

Stack Overflow用户
提问于 2021-04-15 18:50:40
回答 2查看 258关注 0票数 0

我必须为给定的一组输入值开发一个C程序,我们通过指定一个起点和四个基本方向上的一系列运动来描述矩形图形的边界,就好像我们沿着它的边界绕着形成一样。

我们进入每个移动方向(WESN)和长度-“W3”意味着从当前位置向西移动三步(左)。

图1中的数字可以从右上角开始描述为:

“W6,S2,W3,S2,E1,S2,E2,N1,W2,N1,E3,S3,E1,N5”

我的问题是:

  1. 在几何学中,这种形状叫什么?
  2. 怎样才能计算出这种形状的面积?我所有的边长都是W6,S4等。

谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-04-15 20:53:09

这个形状叫做多米诺。这是多边形的特例。

(0,0)点开始,用0区域的一个多边形来解决求面积的问题。下一步,在水平移动时,按矩形扩展该区域。

假设当前点是(x,y)。通过d单元向东移动意味着在(x,0) -> (x,y) -> (x + d, y) -> (x + d, 0)点添加一个矩形。矩形的面积是d * y。当向西移动时,需要减去矩形。

如果行走是顺时针的,则最后的区域是正的,如果路径是逆时针的,则是负的。

这种方法的结果是一个非常简单的程序:

代码语言:javascript
运行
复制
#include <stdio.h>

int main() {
    int x = 0, y = 0, A = 0, d;
    int c;
    while ((c = getchar()) != EOF) { 
        if        (c == 'W' && scanf(" %d", &d) == 1) {
            x += d;
            A += d * y;
        } else if (c == 'E' && scanf(" %d", &d) == 1) {
            x -= d;
            A -= d * y;
        } else if (c == 'N' && scanf(" %d", &d) == 1) {
            y += d;
        } else if (c == 'S' && scanf(" %d", &d) == 1) {
            y -= d;
        }
    }
    if (A < 0) A = -A;
    printf("%d\n", A);
    return 0;
}

对于问题的输入,给出了33的预期答案。

票数 1
EN

Stack Overflow用户

发布于 2021-04-15 20:03:11

这可以称为直线多边形。

计算任意多边形面积的一般算法是:

  • 让(xo,yo)作为起点(“o”表示旧)。
  • 将和S初始化为零。
  • 每一个动作:
    • 从移动点和旧点计算新点(xn,yn) (“n”表示新的)。
    • 在S中添加xn·yo−xo·yn。
    • 设置xo=xn和yo=yn。

  • 多边形内的区域是\S/2。

以上假设最后一次移动关闭多边形,所以最后一点是起点。如果没有,则应该保存起始点的副本,并使用它来完成最后一点的和。

这使用了和/算法 chux指出的。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67114437

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档