在坐标系中定义三角形的高度

时间:2018-07-05 12:52:30

标签: java

我正在用用户输入的坐标系统中的三个点编写运动程序,所以它就是给定三角形的所有边的长度,例如周长和面积。我的目标是 定义给定三角形的高度 ,以便我可以判断输入点是否等于coo系统中的直线,三角形不存在,因为height = 0,还可以定义三角形的面积。那么我如何只给定A,B和C来定义高度呢?总是欢迎提出任何键入我的代码以使其看起来更好的建议! :) 因此,我的代码如下所示:

import java.text.DecimalFormat;
import java.util.Scanner;

public class MainTriangle {

    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);
        double aX;
        double aY;
        double bX;
        double bY;
        double cX;
        double cY;

        System.out.println("-Distance between 3 points in coordinate system-");
        System.out.println();

        System.out.print("point A(x):");
         aX = sc.nextDouble();

        System.out.print("point A(y):");
         aY = sc.nextDouble();

        System.out.print("point B(x):");
         bX = sc.nextDouble();

        System.out.print("point B(y):");
         bY = sc.nextDouble();

         System.out.print("point C(x):");
         cX = sc.nextDouble();

         System.out.print("point C(y):");
         cY = sc.nextDouble();

         System.out.println();

         sc.close();

         double dX = bX - aX;
         double dY = bY - aY;
         double eX = cX - bX;
         double eY = cY - bY;
         double fX = cX - aX;
         double fY = cY - aY;

         double sD = Math.pow(dX, 2) + Math.pow(dY, 2);
         double d = Math.sqrt(sD); // length of d (from point A to point B)

         double sE = Math.pow(eX, 2) + Math.pow(eY, 2);
         double e = Math.sqrt(sE); // length of e (from point B to point C)

         double sF = Math.pow(fX, 2) + Math.pow(fY, 2);
         double f = Math.sqrt(sF); // length of f (from point C to point A)

         System.out.println("Distance from point A to point B is "+new DecimalFormat("##.##").format(d));

         System.out.println();

         System.out.println("Distance from point B to point C is "+new DecimalFormat("##.##").format(e));

         System.out.println();

         System.out.println("Distance from point C to point A is "+new DecimalFormat("##.##").format(f));

         System.out.println();

         double p = d+e+f; // (perameter)

         System.out.println("Perameter of triangle ABC is "+new DecimalFormat("##.##").format(p));

    }

}

4 个答案:

答案 0 :(得分:1)

您想根据给定的点找到三角形的高度,对吗?每个三角形都有三个高度,因此您可以使用Heron公式进行计算。

  

对于具有边a,b,c和半周长s = (a + b + c) / 2的任何三角形,从a边开始的高度由下式给出:ha = (2*sqrt(s*(s-a)*(s-b)*(s-c)))/a

请注意,a,b,c是三角形边的长度

然后您可以检查任何一个高度是否为零。

答案 1 :(得分:1)

double p = d + e + f;
double area = Math.sqrt( p * (p-d) * (p-e) * (p-f) );
double heightD = (2 * area) / d; //height of edge d

根据问题; d,e和f是三角形的边缘。您可以通过知道边的边缘和高度或知道3条边的长度来计算面积。如果知道所有边缘的长度,就可以得到边缘的高度

答案 2 :(得分:0)

“真实”三角形的高度取决于地板的哪一侧。但是您正在寻找一个非三角形。即三个点在一条直线上的非三角形。

要解决这个问题,您可以简单地计算出两个“边”的渐变。如果它们相同,那么您知道您有一个“非三角形”

gradient1 = (y2 -y1)/(x2 - x1)
gradient2 = (y3 -y1)/(x3 - x1)

如果gradient1 == gradient2,则您有一个“非三角形”。由于双精度算术可能会导致细微的差异,因此您可能希望能够容忍梯度上的细微差异(例如,如果差异小于0.0001,则表示非三角形)

更新:可能还需要迎合零除错误!

答案 3 :(得分:0)

三角形的高度存在于三个单位之间。

The A)Base-A B)基数B H)高度-C

A ^ 2 + B ^ 2 = C ^ 2