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

}

最佳答案

我没有在数学上犯任何错误,但是并不能得出正确的结果!


如果没有得到正确的结果,那么我认为您在数学上犯错的可能性很高。


a=std::sqrt((x0-x1)*(x0-x1)-(y0-y1)*(y0-y1));



-看起来可疑。我假设您正在尝试查找(x0, y0)(x1, y1)之间的距离。如果是这样,您应该将两个数量相加,而不是相减。

我对Heron的公式不熟悉,但是you can use this simpler formula

area = std::abs(x0 * (y1 - y2) + x1 * (y2 - y0) + x2 * (y0 - y1)) / 2;


编辑:我忘了为Antonio指出的简化公式提及abs函数。

关于c++ - C++函数计算三角形的面积,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29376366/

10-11 17:55