三角型给出三点(急,钝,右)

时间:2014-09-16 20:29:06

标签: java geometry

目标:给定三个(x,y)坐标,确定三角形是锐角,钝角,右角还是不能形成三角形。当我为急性三角进入状态时,我的问题开始了。我进入的方式,该程序不会比急性三角更进一步。总之,"它是一个直角三角形或者是急性的。"请帮我修理一下。感谢帮助。到目前为止,这是我的代码:

        //Calculate change in x for distance formula
        delta_x1 = (x2-x1)*(x2-x1);
        delta_x2 = (x3-x2)*(x3-x2);
        delta_x3 = (x3-x1)*(x3-x1);

        //Calculate change in y for distance formula
        delta_y1 = (y2-y1)*(y2-y1);
        delta_y2 = (y3-y2)*(y3-y2);
        delta_y3 = (y3-y1)*(y3-y1);
        //Calculate distance foe each of the three sides if not CO-LINEAR
        side1 = Math.sqrt(delta_x1 + delta_y1);
        side1 = Math.round(side1*side1);
        side2 = Math.sqrt(delta_x2 + delta_y2);
        side2 = Math.round(side2*side2);
        side3 = Math.sqrt(delta_x3 + delta_y3);
        side3 = Math.round(side3*side3); 

        if ((side1 + side2 == side3) || 
            (side1 + side3 == side2) ||
            (side2 + side3 == side1)) {
            System.out.println ("Right Triangle!");
        }
        else if ((side1 + side2 > side3) ||
                 (side1 + side3 > side2) ||
                 (side2 + side3 > side1)) {
            System.out.println("Acute Triangle!");
        }
        else if ((side1 + side2 < side3) ||
                 (side1 + side3 < side2) ||
                 (side2 + side3 < side1)) {
            System.out.println("Obtuse Triangle!");
        }
        else {
            System.out.println("Can't form a triangle.");
        }

1 个答案:

答案 0 :(得分:1)

你有三个严重的错误和两个不端行为。

(1)不要调用边side1, side2, side3的方格。这很令人困惑,但它不会让你的程序产生不正确的结果。

(2)你取平方根,然后对结果进行平方。这是毫无意义的,但同样,它并不是一个错误。

(3)不要围绕两边的方格,因为它们可能不是整数。如果边长不是整数,这将引入错误。

(4)在敏锐的情况下用||替换&&。所有这三个不等式必须保持三角形是尖锐的。这是导致一切都出错的错误。

(5)因为钝角条件是正确的,你需要原始的边长,而不是边的正方形;并且您希望<=代替<。但由于这三个长度来自实际点之间的距离,所以在这个阶段要检查的是点是否共线。为此,如果使用(x2-x1)*(y3-y2)==(y2-y1)*(x3-x2)之类的等式,那么它将不太容易出现舍入错误,当且仅当这些点是共线时才会为真。