使用C++中的结构计算形状周长的问题
Problem calculating the perimeter of a shape by using structures in c++
问题在于我必须使用结构来计算形状的周长。给我的数据是:形状的边数,具有该形状的顶点数以及每个顶点的坐标 X 和 Y。
#include <iostream>
using namespace std;
#include <math.h>
正在初始化结构:
Point保存一个点的坐标(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 社区 :)
res += sqrt(((pow(p.x[i + 1],2)) - pow(p.x[i], 2)) + (pow(p.y[i + 1], 2) - pow(p.y[i], 2)));
这是错误的。你正在计算 xi+1^2 - xi^2,但你在这里需要的是 (xi +1 - xi)^2 -- 差的平方,不是平方的差。
问题在于我必须使用结构来计算形状的周长。给我的数据是:形状的边数,具有该形状的顶点数以及每个顶点的坐标 X 和 Y。
#include <iostream>
using namespace std;
#include <math.h>
正在初始化结构:
Point保存一个点的坐标(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 社区 :)
res += sqrt(((pow(p.x[i + 1],2)) - pow(p.x[i], 2)) + (pow(p.y[i + 1], 2) - pow(p.y[i], 2)));
这是错误的。你正在计算 xi+1^2 - xi^2,但你在这里需要的是 (xi +1 - xi)^2 -- 差的平方,不是平方的差。