Лежит ли точка в треугольнике?
По учёбе нужно создать программу, которая могла бы вычислить находится ли точка в заданном треугольнике. Даются две точки и это является инпутом, но я сам уверен, что эта программа не подходит условиям для полного выполнения.
import java.io.*;
import java.util.*;
public class Solution {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
double x = scan.nextDouble();
double y = scan.nextDouble();
if (x <= 200) {
if (y <= 50)
System.out.println("The point is in the triangle");
else
System.out.println("The point is not in the triangle");
}
}
}
Ответы (4 шт):
Scanner scan = new Scanner(System.in);
double x = scan.nextDouble();
double y = scan.nextDouble();
if(y > 100 - x / 2 || x < 0 || y < 0) {
System.out.println("Out");
} else {
System.out.println("In");
}
100 - 1/2 * x - формула прямой гипотенузы. Если на данной абсциссе точка выше, то она вне, иначе - в.
При хоть одной отрицательной координате(x или y) точка, разумеется, в треугольник не попадает.
Условие:
x >= 0 && y >= 0 && 200 - x >= 2 * y
Проверка:
var xs = [-1, 0, 1, 49, 50, 51, 99, 100, 101, 149, 150, 151, 199, 200, 201]
var ys = [-1, 0, 1, 49, 50, 51, 99, 100, 101].reverse()
var res = ""
for (var y of ys) {
res += `<tr><th>${y}`
for (var x of xs) {
res += `<td class=${x >= 0 && y >= 0 && 200 - x >= 2 * y}>`
}
res += `</tr>`
}
res += `<tr><th>${xs.map(x => `<th>${x}`).join("")}</tr>`
document.body.innerHTML = `<table>${res}</table>`
th, td { width: 2em; height: 1em; font-size: 14px; line-height: 1em; }
.true { background: green; }
.false { background: red; }
1, 2, 3 - вершины треугольника, 0 - точка
(x1 - x0) * (y2 - y1) - (x2 - x1) * (y1 - y0)
(x2 - x0) * (y3 - y2) - (x3 - x2) * (y2 - y0)
(x3 - x0) * (y1 - y3) - (x1 - x3) * (y3 - y0)
Если они одинакового знака, то точка внутри треугольника, если что-то из этого - ноль, то точка лежит на стороне, иначе точка вне треугольника.
Уже было - https://www.cyberforum.ru/showthread.php?t=8234. Математическая часть - векторное и псевдоскалярное произведения. Реализация - считаются произведения (1, 2, 3 - вершины треугольника, 0 - точка): (x1 - x0) * (y2 - y1) - (x2 - x1) * (y1 - y0) (x2 - x0) * (y3 - y2) - (x3 - x2) * (y2 - y0) (x3 - x0) * (y1 - y3) - (x1 - x3) * (y3 - y0) Если они одинакового знака, то точка внутри треугольника, если что-то из этого - ноль, то точка лежит на стороне, иначе точка вне треугольника.
