#java #double
Вопрос:
Поэтому в основном мне нужно проверить, находится ли точка внутри трех координат внутри координатной плоскости. Я использую формулу героя, чтобы вычислить то же самое. Далее следует ссылка: https://www.tutorialspoint.com/Check-whether-a-given-point-lies-inside-a-Triangle.
В основном даны (x1, y1) (x2, y2) и (x3, y3), чтобы проверить, находится ли точка (p1, p2) внутри треугольника, образованного первыми тремя точками, нам нужно вычислить сумму площадей трех маленьких треугольников, образованных внутри точкой (p1, p2), образующей вершины меньшего треугольника.
При использовании C и использовании float я вижу, что площадь меньших треугольников увеличивается, однако при использовании double( в java) есть небольшая разница. Справедливо ли предполагать, что площадь полного треугольника меньше трех маленьких треугольников, чтобы точка находилась внутри плана координат.
итак, если (x1, y1) (x2, y2) и (x3, y3) (0.0, 0.0) (200.0, 0.0) и (0.0, 100.0), и точка, которую нужно проверить, равна (1, 1), поэтому больший треугольник образует площадь :20000.0 Площадь меньшего треугольника :19900.0100.0200.0
Согласно алгоритму, области должны быть равными, чтобы он находился внутри треугольника. Что здесь не так, я предполагаю, что ошибка в том, что я использую double.
public class C3E27RightTriangle {
public static double getAreaOfTriangle(double x1, double y1, double x2, double y2, double x3, double y3 ) {
double area = Math.abs((x1 * (y2 -y3)) (x2 * (y1 - y3)) (x3 * (y1-y2)) );
return area;
}
public static void main(String[] args) {
System.out.println("Program to check if the coordinates form a right triangle in coordinate space");
System.out.println(".....................................................");
System.out.println(
"Please enter the first set of point separated by spaces. Note please enter integers, strings are not valid");
System.out.println(
"*************************************************************************************************************n");
int exitValue = 0;
double x1, y1, x2, y2, x3, y3, px1, py1, distance1, distance2, distance3, distancex1p1, distancex2p1, distancex3p1;
x1 = 0.0;
y1 = 0.0;
x2 = 200.0;
y2 = 0.0;
x3 = 0.0;
y3 = 100.0;
// Prepares the scanner object
Scanner scnr;
do {
try {
scnr = new java.util.Scanner(System.in);
System.out.println("Please enter x1 and y1 separated by spaces and then press enter");
// get the first set of points
px1 = scnr.nextDouble();
py1 = scnr.nextDouble();
System.out.println("nThe coordinates you entered are: (" px1 " , " py1 " )");
// area of the full triangle
double area = getAreaOfTriangle(x1, y1, x2, y2, x3, y3);
// area of first smaller triangle
double area1 = getAreaOfTriangle(px1, py1, x2, y2, x3, y3);
// area of second smaller triangle
double area2 = getAreaOfTriangle(px1, py1, x1, y1, x3, y3);
// area of third smaller triangle
double area3 = getAreaOfTriangle(px1, py1, x1, y1, x2, y2);
System.out.println("Area :" area);
System.out.println("Area of smaller triangle :" area1 area2 area3);
if (area >= area1 area2 area3) {
System.out.println("This point is inside the triangle");
} else {
System.out.println("This point is not inside the triangle");
}
System.out.println(
"Do you want to check it for another set of coordinates (1/0) enter 1 to continue 0 to exit");
exitValue = scnr.nextInt();
// I used it in-case user wanted to calculate another set
if (exitValue == 0) {
scnr.close();
break;
}
} catch (Exception e) {
System.out.println("nPlease enter a valid input, lets try again");
continue;
}
} while (true);
}
}