Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 三角形类型给定三个点(锐角、钝角、右侧)_Java_Geometry - Fatal编程技术网

Java 三角形类型给定三个点(锐角、钝角、右侧)

Java 三角形类型给定三个点(锐角、钝角、右侧),java,geometry,Java,Geometry,目标:给定三个(x,y)坐标,确定三角形是锐角、钝角、直角还是不能形成三角形。我的问题始于我为锐角三角形设置条件。按照我的输入方式,该程序不会比“锐角三角形”更进一步。总之,“要么是直角三角形,要么是锐角。”请帮我修一下。谢谢你的帮助。以下是我目前的代码: //Calculate change in x for distance formula delta_x1 = (x2-x1)*(x2-x1); delta_x2 = (x3-x2)*(x3-x

目标:给定三个(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.");
        }
//计算距离公式的x变化
delta_-x1=(x2-x1)*(x2-x1);
delta_x2=(x3-x2)*(x3-x2);
δx3=(x3-x1)*(x3-x1);
//计算距离公式的y变化
delta_y1=(y2-y1)*(y2-y1);
delta_y2=(y3-y2)*(y3-y2);
delta_y3=(y3-y1)*(y3-y1);
//如果不是共线的,则计算三个侧面的距离
side1=数学sqrt(delta_x1+delta_y1);
side1=数学圆(side1*side1);
side2=数学sqrt(delta_x2+delta_y2);
side2=数学圆(side2*side2);
side3=数学sqrt(delta_x3+delta_y3);
side3=数学圆(side3*side3);
如果((边1+边2==边3)|
(边1+边3==边2)||
(边2+边3==边1)){
System.out.println(“直角三角形!”);
}
否则如果((侧1+侧2>侧3)||
(第1方+第3方>第2方)||
(侧2+侧3>侧1)){
System.out.println(“锐角三角形”);
}
否则如果((第1侧+第2侧<第3侧)||
(第1侧+第3侧<第2侧)||
(侧2+侧3<侧1)){
System.out.println(“钝角三角形!”);
}
否则{
System.out.println(“不能形成三角形”);
}

您有三个严重错误和两个轻罪

(1) 不要调用边的正方形
side1、side2、side3
。这很让人困惑,但它不会让你的程序给出错误的结果

(2) 取平方根,然后将结果平方。这是毫无意义的,但再一次,这不是一个真正的错误

(3) 不要将边的平方四舍五入,因为它们可能不是整数。如果边长不是整数,这将引入错误

(4) 将
|
替换为
&&
,使其处于敏锐状态。这三个不等式都必须成立,三角形才是锐角。这是一个错误,让一切都出了问题


(5) 为了使钝角条件正确,您需要原始边长,而不是边长的平方;你想知道,变量sideX实际上是边的平方,这是非常令人困惑的。你的条件不正确,钝角三角形在锐角处被吃掉了。考虑一个三角形,边10, 10,18,这是钝角。10^2+18^2>10^2因此急性期无效。您应该使用最大值作为lt符号右侧的语句,而不是全部使用。为什么要调用Math.round()?对于这个问题,您的所有变量都应该是
double
。谢谢大家的建议。这很有帮助。我使用Math.round()将平方根(10!=10.0000001)平方回。但这是不必要的@指南针如何插入最大值声明或最长边?我认为这将使我的检查更简单、更高效。谢谢。嘿@cats2385下面的答案,#4解释了它。我在逻辑解释上犯了错误,无法编辑,到那时,一个正确的答案已经形成。您希望所有三个a2+b2>c2都有效,而不仅仅是一个。所以,基本上,你的直角检查是好的,然后你的锐角检查,(a2+b2>c2&&a2+c2>b2&&b2+c2>a2),否则我们肯定知道它是一个钝角三角形。你的最后一句话,不能形成三角形,实际上有点难找到。在本程序中,3个完全相同的点(0,0)(0,0)(0,0)将被视为三角形。谢谢David。成功了!两个问题:1)为什么我不能用边的正方形表示迟钝?2) 如果我遇到共线坐标会怎样?(即(0,0)、(1,1)、(2,2))?感谢共线坐标,最简单的检查方法是取非平方元素。所以a+b==c | | a+c==b | | b+c==a。这可以通过预先使c始终为最大值来大大简化,所以你只需要检查a+b==在你的钝度检查中,你应该检查你是否有一个真正的三角形。你已经排除了直角三角形或锐角三角形的情况。所以你要么有一个钝角三角形,要么有共线点。这就是为什么你只需要在那个阶段检查点是否共线。谢谢@DavidWallace。澄清一下,这就是你的意思吗?给定(x1,y1),(x2,y2),(x3,y3),使用距离公式计算d1,d2和d3的以下条件:1)d1+d2最终有效!非常感谢你的帮助!