目标:给定三个(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/