我正在尝试编写代码来计算多边形的面积,但看起来有些东西没有加起来。可能是公式不对,或者我需要使用绝对值函数?
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)
我看到的问题:
您正在计算面积,就好像有可以max_size用来计算面积的元素一样。我认为你需要使用actual_size.
由于数组的 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)面积计算错误。替换行:
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)面积项的计算需要使用环绕索引。假设你有 5 分。处理第 5 个点时,必须使用索引4和0,而不是4和5。
代替
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)面积项的计算需要固定。而不是使用
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)