给定3个用户定义的点,计算三角形的面积 - 初学者

4
我可以让我的代码编译通过,但它并没有产生所需的面积。我不确定我在哪里犯了错。
他们希望你让用户输入三角形三个点的6个坐标(x和y值),并计算出面积。我的代码如下:
import java.util.Scanner;

public class AreaTriangle {
    // find the area of a triangle
    public static void main (String [] args) {
        double side1 = 0;
        double side2 = 0;
        double side3 = 0;

        Scanner input = new Scanner(System.in);

        //obtain three points for a triangle
        System.out.print("Enter three points for a triangle (x and y intercept): ");
        double side1x  = input.nextDouble();
        double side1y  = input.nextDouble();
        double side2x  = input.nextDouble();
        double side2y  = input.nextDouble();
        double side3x  = input.nextDouble();
        double side3y  = input.nextDouble();

        //find length of sides of triangle
        side1 = Math.pow(Math.pow((side2x - side1x), 2) + Math.pow((side2y - side1y), 2) * .05, side1);
        side2 = Math.pow(Math.pow((side3x - side2x), 2) + Math.pow((side3y - side2y), 2) * .05, side2);
        side3 = Math.pow(Math.pow((side1x - side3x), 2) + Math.pow((side1y - side3y), 2) * .05, side3);

        double s = (side1 + side2 + side3) / 2;

        double area = Math.sqrt(s * (s - side1) * (s - side2) * (s-side3)) * 0.5;

        System.out.println("area" + area);
    }
}

1
你从哪里得到那个用于找到边长的公式? - madth3
放错了地方。我把一堆代码放在一起,试图猜测它的作用。 - Lish
3个回答

4

2

@Michael的建议很好。按照您的代码,我会这样使用勾股定理:

side1 = Math.sqrt(
            Math.pow((side2x - side1x), 2)
          + Math.pow((side2y - side1y), 2));

在你的代码中:

side1 = Math.pow(
            Math.pow((side2x - side1x), 2) 
          + Math.pow((side2y - side1y), 2) * .05
       , side1);

side1 在计算之前是 0,而几乎任何数的 0 次方都是 1。因此,无论点数如何,side1 的最终结果都为 1。


现在这就更有意义了。 - Lish

0

我发现的另一种方法是使用叉积来找到三角形的面积。这可能会更容易一些,因为您已经有了这些点。您可以将三个点转换为两个向量并取叉积。

编辑: 哎呀,忘记添加三角形的面积应该是叉积的一半,因为叉积会给出由两个向量形成的平行四边形的面积(而三角形是其一半)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接