目标:给定三个(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.");
}
答案 0 :(得分:1)
你有三个严重的错误和两个不端行为。
(1)不要调用边side1, side2, side3
的方格。这很令人困惑,但它不会让你的程序产生不正确的结果。
(2)你取平方根,然后对结果进行平方。这是毫无意义的,但同样,它并不是一个错误。
(3)不要围绕两边的方格,因为它们可能不是整数。如果边长不是整数,这将引入错误。
(4)在敏锐的情况下用||
替换&&
。所有这三个不等式必须保持三角形是尖锐的。这是导致一切都出错的错误。
(5)因为钝角条件是正确的,你需要原始的边长,而不是边的正方形;并且您希望<=
代替<
。但由于这三个长度来自实际点之间的距离,所以在这个阶段要检查的是点是否共线。为此,如果使用(x2-x1)*(y3-y2)==(y2-y1)*(x3-x2)
之类的等式,那么它将不太容易出现舍入错误,当且仅当这些点是共线时才会为真。