目标:给定三个(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)不要将边的平方称为side1, side2, side3。这非常令人困惑,但是不会使您的程序给出错误的结果。

(2)您求平方根,然后求平方结果。这是没有意义的,但是同样,这并不是一个错误。

(3)不要对边的正方形进行四舍五入,因为它们可能不是整数。如果边长不是整数,将会引入错误。

(4)在紧急情况下,将||替换为&&。所有这三个不等式都必须成立,才能使三角形成为锐角。这是使一切都出错的错误。

(5)为了使钝性条件正确,您想要原始的边长,而不是边的正方形;而您想用<=代替<。但是,由于这三个长度来自实际点之间的距离,因此在此阶段需要检查的仅仅是这些点是否共线。为此,如果使用等式(例如(x2-x1)*(y3-y2)==(y2-y1)*(x3-x2)),则舍入错误的可能性较小,当且仅当点是共线的时才为真。

关于java - 三角型给出了三点(急性,钝角,右),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25877875/

10-13 09:12