我正在用用户输入的坐标系统中的三个点编写运动程序,所以它就是给定三角形的所有边的长度,例如周长和面积。我的目标是 定义给定三角形的高度 ,以便我可以判断输入点是否等于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));
}
}
答案 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