多边形面积 - C++

Yul*_*iya 0 c++ geometry

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

double polygon_area(int actual_size, double x[], double y[])
{

    printf("In polygon.area\n");                //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);
}
Run Code Online (Sandbox Code Playgroud)

R S*_*ahu 5

我看到的问题:

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

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

    for (i = 0; i <= max_size; i = i + 1)
    
    Run Code Online (Sandbox Code Playgroud)

    使用

    for (i = 0; i < actual_size; ++i)
    // Using ++i is more idiomatic that using i = i + 1
    
    Run Code Online (Sandbox Code Playgroud)
  3. 面积计算错误。替换行:

    area = (x[i + 1] + x[i]) * (y[i + 1] - y[i]);
    
    area = (area * 0.50);
    
    Run Code Online (Sandbox Code Playgroud)

    经过

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

    代替

    x[i + 1] + x[i]) * (y[i + 1] - y[i]);
    
    Run Code Online (Sandbox Code Playgroud)

    使用

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

    0.5*(x2 + x1) * (y2 - y1))
    
    Run Code Online (Sandbox Code Playgroud)

    你需要使用:

    0.5*(x1.y2 - x2.y1)
    
    Run Code Online (Sandbox Code Playgroud)

这是该函数的简化版本:

double polygon_area(int actual_size, double x[], double y[])
{
    printf("In polygon.area\n");

    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);
}
Run Code Online (Sandbox Code Playgroud)