C++函数计算三角形的面积

Ada*_*dam 0 c++

我在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)

Cor*_*lks 8

我没有在数学上犯任何错误,但它没有产生正确的结果!

如果它没有产生正确的结果,那么我认为你在数学上犯错误的可能性很大.

a=std::sqrt((x0-x1)*(x0-x1)-(y0-y1)*(y0-y1));
Run Code Online (Sandbox Code Playgroud)

-看起来很可疑.我假设你正在试图找到之间的距离(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简化公式的功能,这是安东尼奥指出的.