我在C++中有以下函数,它应该使用Heron的公式找到三角形的区域.我没有在数学上犯任何错误,但它没有产生正确的结果!我看着它超过3个小时,我找不到任何错误.我错过了什么?
float TriangleArea(float x0, float y0, float x1, float y1, float x2, float y2)
{
float area_triangle;
float a, b, c, s;
a=std::sqrt((x0-x1)*(x0-x1)-(y0-y1)*(y0-y1));
b=std::sqrt((x1-x2)*(x1-x2)-(y1-y2)*(y1-y2));
c=std::sqrt((x0-x2)*(x0-x2)-(y0-y2)*(y0-y2));
s=(a+b+c)/2;
area_triangle=std::sqrt((s*(s-a)*(s-b)*(s-c)));
return area_triangle;
}
Run Code Online (Sandbox Code Playgroud)
我没有在数学上犯任何错误,但它没有产生正确的结果!
如果它没有产生正确的结果,那么我认为你在数学上犯错误的可能性很大.
Run Code Online (Sandbox Code Playgroud)a=std::sqrt((x0-x1)*(x0-x1)-(y0-y1)*(y0-y1));
这-看起来很可疑.我假设你正在试图找到之间的距离(x0, y0)和(x1, y1).如果是这种情况,您应该添加两个数量,而不是减去.
我不熟悉Heron的配方,但你可以使用这个更简单的公式:
area = std::abs(x0 * (y1 - y2) + x1 * (y2 - y0) + x2 * (y0 - y1)) / 2;
Run Code Online (Sandbox Code Playgroud)
编辑:我忘了提到abs简化公式的功能,这是安东尼奥指出的.
| 归档时间: |
|
| 查看次数: |
6236 次 |
| 最近记录: |