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

时间:2015-03-31 18:57:55

标签: 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;

}

3 个答案:

答案 0 :(得分:8)

  

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

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

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

-看起来很可疑。我假设您正在尝试找到(x0, y0)(x1, y1)之间的距离。如果是这种情况,您应该添加两个数量,而不是减去。

我不熟悉苍鹭的​​公式,但是you can use this simpler formula

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

修改:我忘记提及Antonio指出的简化公式的abs函数。

答案 1 :(得分:3)

我认为你有一个标志错误。值a,b和c是三角形边,对吗?

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

答案 2 :(得分:2)

可以找到替代公式(带演示)here

area = fabs((x0 - x2) * (y1 - y0) - (x0 - x1) * (y2 - y0) ) / 2;

(作为旁注,如果公式必须用于测试点共线性,则可以删除绝对值...但是无论如何你可能还需要它,因为使用浮点你不能测试相等但是对某些epsilon值)