使用C ++中的结构计算形状的周长时遇到问题

时间:2018-11-06 00:44:43

标签: c++ parameters structure math.h

问题在于我必须使用结构来计算形状的周长。提供给我的数据是:形状的边数,具有该形状的顶点数以及每个顶点的X和Y坐标。

#include <iostream>
using namespace std;
#include <math.h>

初始化结构:

点保存点(x,y)的坐标

struct Point
{
    int x[100];
    int y[100];
};

多边形会保存具有该形状的边和顶点的数量

struct Poligon
{
    int sides;
    int vertex;
};

void InputVertexsPoligon(struct Point &p, struct Polygon &op);
float PerimeterPoligon(struct Point &p, struct Polygon &op);

变量的声明和调用函数:

int main()
{
    struct TPunt p;
    struct TPoligon op;
    float num;

    InputVertexsPoligon(p, op);
    num = PerimeterPoligon(p, op);

    cout << "Perimetre del poligon: " << num << endl;    

system("PAUSE");
return 0;
 }

在此输入顶点数,因此每个顶点的(x,y)坐标。

 void InputVertexsPoligon(struct Point &p, struct Polygon &op)
 {
    cin >> op.vertex;
    for (int i = 0; i < op.vertex; i++)
    {
         cin >> p.x[i]; cin >> p.y[i];
    }

}

最后,我使用两点公式之间的距离,并将它们全部求和,直到(x [i + 1])和(y [i + 1])等于数字顶点。

float PerimeterPoligon(struct Point &p, struct Polygon &op)
{
    float res = 0; 
    for (int i = 0; (i+1) < op.vertex; i++)
    {
    res += sqrt(((pow(p.x[i + 1],2)) - pow(p.x[i], 2)) + (pow(p.y[i + 1], 2) - pow(p.y[i], 2)));
    }
    return res;
 }

所以,问题在于出了点问题,最后一个函数中计算周长的结果输出是“ -nan(ind)”。

编辑,更正表格:

是的,我让广场变糟了,好的公式是:

res += sqrt(pow(p.x[i + 1] - p.x[i], 2) + pow(p.y[i + 1] - p.y[i], 2));

这是另一个错误,我正在计算点之间的距离,假设我们有(0,0)(5,5)和(0,3),我正在计算(0,0)- (5,5)-(0,3),但不在(0,3)-(0,0)之间。所以我添加了这个:

for (int i = 0; (i) < (op.vertex)-1; i++)
{
    res += sqrt(pow(p.x[i + 1] - p.x[i], 2) + pow(p.y[i + 1] - p.y[i], 2));
    index = i;
}
res += sqrt(pow(p.x[index + 1] - p.x[0], 2) + pow(p.y[index + 1] - p.y[0], 2));

所以现在计算出的距离是这样的(0,0)-(5,5)-(0,3)-(0,0)。 *这些“-”不是减号。

感谢Stack Overflow社区:)

1 个答案:

答案 0 :(得分:2)

res += sqrt(((pow(p.x[i + 1],2)) - pow(p.x[i], 2)) + (pow(p.y[i + 1], 2) - pow(p.y[i], 2)));

这是错误的。您正在计算x i + 1 ^ 2-x i ^ 2,但是这里需要的是(x i + 1 -x i )^ 2-差异的平方,而不是平方的差异。