找出一个点是否在三角形内

我已经在这几个小时,尝试不同的方法看几乎每个问题。 也许我完全错了,但我觉得我的数学是正确的,但无论我输入什么数字,我都得到相同的输出。 我的代码在某个地方关闭,我必须在午夜之前将其打开。

这一切都很有趣:找出一个点是否在三角形代码中。 (对于初学者)

import java.util.Scanner; public class PointsTriangle { // checks if point entered is within the triangle //given points of triangle are (0,0) (0,100) (200,0) public static void main (String [] args) { //obtain point (x,y) from user System.out.print("Enter a point's x- and y-coordinates: "); Scanner input = new Scanner(System.in); double x = input.nextDouble(); double y = input.nextDouble(); //find area of triangle with given points double ABC = ((0*(100-0 )+0*(0 -0)+200*(0-100))/2.0); double PAB = ((x*(0 -100)+0*(100-y)+0 *(y- 0))/2.0); double PBC = ((x*(100-0 )+0*(0 -y)+200*(y-100))/2.0); double PAC = ((x*(0 -100)+0*(100-y)+200*(y- 0))/2.0); boolean isInTriangle = PAB + PBC + PAC == ABC; if (isInTriangle) System.out.println("The point is in the triangle"); else System.out.println("The point is not in the triangle"); }//end main }//end PointsTriangle 

如果您绘制图片,您可以看到该点必须满足简单的不等式(在某些线的右下方/上方/右侧)。 无论“在边缘”是进出还是我都会留给你:

 Y > 0 (above the X axis) X > 0 (to the right of the Y axis) X + 2* Y < 200 (below the hypotenuse) 

写下围绕这三个的if语句,你就完成了:

 if( (y > 0) && (x > 0) && (x + 2*y < 200) ) System.out.println("The point is in the triangle"); else System.out.println("The point is not in the triangle"); 

您将错误的值顺序放入公式中; 因此,结果是错误的。 如果3个顶点如下

 A(x1, y1) B(x2, y2), C(x3, y3) 

然后该区域计算为

 double ABC = Math.abs (x1 * (y2 - y3) + x2 * (y3 - y1) + x3 * (y1 - y2)) / 2; 

之后,您只需用输入点替换每个顶点,我们将有以下三角形:PBC,APC,ABP。

把所有东西放在一起,我们会有正确的

 int x1 = 0, y1 = 0; int x2 = 0, y2 = 100; int x3 = 200, y3 = 0; // no need to divide by 2.0 here, since it is not necessary in the equation double ABC = Math.abs (x1 * (y2 - y3) + x2 * (y3 - y1) + x3 * (y1 - y2)); double ABP = Math.abs (x1 * (y2 - y) + x2 * (y - y1) + x * (y1 - y2)); double APC = Math.abs (x1 * (y - y3) + x * (y3 - y1) + x3 * (y1 - y)); double PBC = Math.abs (x * (y2 - y3) + x2 * (y3 - y) + x3 * (y - y2)); boolean isInTriangle = ABP + APC + PBC == ABC;