多边形的面积-C++

Area of Polygon - C++

本文关键字:-C++ 多边形      更新时间:2023-10-16

我正试图编写一段代码来计算多边形的面积,但看起来有些东西没有加起来。可能是公式被关闭了,或者我需要使用绝对值函数?

double polygon_area(int actual_size, double x[], double y[])
{
    printf("In polygon.arean");                //Initial basic test
    int i;
    double area;
    area = 0.0;
    for (i = 0; i <= max_size; i = i + 1)
    {
        area = (x[i + 1] + x[i]) * (y[i + 1] - y[i]);
        area = (area * 0.50);
    }
    printf("The area of the polygon is %lf  n", area);
    return (area);
}

我看到的问题:

  1. 您正在计算面积,就好像有max_size元素可用于计算面积一样。我认为你需要使用actual_size

  2. 由于数组的C++索引从0开始,所以它们需要停止在actual_size-1,而不是actual_size。代替

    for (i = 0; i <= max_size; i = i + 1)
    

    使用

    for (i = 0; i < actual_size; ++i)
    // Using ++i is more idiomatic that using i = i + 1
    
  3. 面积计算错误。更换线路:

    area = (x[i + 1] + x[i]) * (y[i + 1] - y[i]);
    area = (area * 0.50);
    

    通过

    area += 0.5*(the area term);
    
  4. 面积项的计算需要使用环绕索引。假设你得了5分。处理第5个点时,必须使用索引40,而不是45

    代替

    x[i + 1] + x[i]) * (y[i + 1] - y[i]);
    

    使用

    x[(i + 1)%actual_size] + x[i]) * (y[(i + 1)%actual_size] - y[i]);
    
  5. 面积项的计算需要固定。而不是使用

    0.5*(x2 + x1) * (y2 - y1))
    

    您需要使用:

    0.5*(x1.y2 - x2.y1)
    

以下是该函数的简化版本:

double polygon_area(int actual_size, double x[], double y[])
{
    printf("In polygon.arean");
    double area = 0.0;
    for (int i = 0; i < actual_size; ++i)
    {
       int j = (i + 1)%actual_size;
       area += 0.5 * (x[i]*y[j] -  x[j]*y[i]);
    }
    printf("The area of the polygon is %lf  n", area);
    return (area);
}