Точка и треугольник
Принадлежит ли точка [latex]O[/latex] треугольнику [latex]ABC[/latex]?
Входные данные
Содержит координаты точек [latex]O, A, B, C[/latex]. Числовые значения не превышают по модулю 100.
Выходные данные
Вывести 1, если точка [latex]O[/latex] принадлежит треугольнику [latex]ABC[/latex] и 0 в противоположном случае.
№ | Входные данные | Выходные данные |
---|---|---|
1 | 2 6 -9 3 8 1 5 11 | 1 |
2 | -13 10 -12 5 99 80 17 13 | 0 |
3 | 98 -50 -87 7 5 3 23 17 | 0 |
4 | 5 15 7 12 5 3 2 54 | 1 |
5 | 2 2 3 1 1 3 9 11 | 1 |
Код программы
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
import java.util.*; import java.lang.*; import java.io.*; class Main { public static void main (String[] args) throws java.lang.Exception { Scanner scan = new Scanner(System.in); double x0 = scan.nextDouble(); double y0 = scan.nextDouble(); double x1 = scan.nextDouble(); double y1 = scan.nextDouble(); double x2 = scan.nextDouble(); double y2 = scan.nextDouble(); double x3 = scan.nextDouble(); double y3 = scan.nextDouble(); double z1,z2,z3; z1 = (x1 - x0) * (y2 - y1) - (x2 - x1) * (y1 - y0); z2 = (x2 - x0) * (y3 - y2) - (x3 - x2) * (y2 - y0); z3 = (x3 - x0) * (y1 - y3) - (x1 - x3) * (y3 - y0); if ((z1>=0 && z2>=0 && z3>=0) || (z1<=0 && z2<=0 && z3<=0)) System.out.println("1"); else System.out.println("0"); } } |
Решение
Для того, чтобы точка [latex]M[/latex] принадлежала треугольнику, заданному точками [latex]D([/latex]$x_{1}$,$y_{1}$[latex]), [/latex] [latex]E([/latex]$x_{2}$,$y_{2}$[latex]), [/latex][latex]F([/latex]$x_{3}$,$y_{3}$[latex]), [/latex] необходимо, чтобы псевдоскалярное (косое) произведение соответствующих векторов было больше либо равно нулю или же меньше либо равно нуля. Пользуясь формулой для косого произведения, запишем произведения векторов.
[$\overline{DE}$,$\overline{MD}$]=($x_{1}$-$x_{0}$) $\cdot$ ($y_{2}$-$y_{1}$)-($x_{2}$-$x_{1}$) $\cdot$ ($y_{1}$-$y_{0}$)
[$\overline{EF}$,$\overline{ME}$]=($x_{2}$-$x_{0}$) $\cdot$ ($y_{3}$-$y_{2}$)-($x_{3}$-$x_{2}$) $\cdot$ ($y_{2}$-$y_{0}$)
[$\overline{FD}$,$\overline{MF}$]=($x_{3}$-$x_{0}$) $\cdot$ ($y_{1}$-$y_{3}$)-($x_{1}$-$x_{3}$) $\cdot$ ($y_{3}$-$y_{0}$)
Если [$\overline{DE}$,$\overline{MD}$], [$\overline{EF}$,$\overline{ME}$] и [$\overline{FD}$,$\overline{MF}$] больше либо равно нулю или же меньше либо равно нуля, то точка принадлежит треугольнику.