Ваша цель - определить, находится ли данная 2D точка X в области треугольника с заданными вершинами A, B, C.
Напишите функцию, которая принимает координаты контрольной точки X и трех вершин треугольника (итого всего 8 координат) и возвращает True, если точка находится внутри этого треугольника, и False, если она находится снаружи.
Не беспокойтесь о крайних случаях. Если точка лежит на границе треугольника (ребра или вершины) или треугольник на самом деле является отрезком линии, ваш код может делать все, что угодно, включая сбой. Также не беспокойтесь о числовой стабильности или точности с плавающей точкой.
Ваш код должен быть именованной функцией. Фрагменты кода не принимаются.
Побеждает несколько персонажей.
Входные данные:
Восемь действительных чисел, представляющих координаты. Числа будут лежать в диапазоне (-1,1)
.
Точный формат ввода является гибким. Вы можете, например, взять восемь чисел, список из восьми чисел, список из четырех точек, каждой из которых присваивается кортеж, матрицу 2 * 4, четыре комплексных числа, два списка из x-координат и y-координат, и так далее.
Входные данные должны быть просто числами в некотором контейнере, без каких-либо дополнительных данных. Вы не можете использовать входные данные для выполнения какой-либо предварительной обработки, а также не можете требовать каких-либо ограничений на ввод, например, требовать, чтобы точки задавались в восходящей координате y. Ваш ввод должен позволять любые восемь координат (хотя ваш код может вести себя произвольно в случаях краев, упомянутых ранее).
Пожалуйста, укажите ваш формат ввода.
Выход:
Либо соответствующий логический True
/ False
, соответствующий номер 1
/0
, либо аналоги на вашем языке.
Контрольные примеры
Входные данные получают список [X,A,B,C]
из четырех кортежей, сначала контрольную точку, а затем три вершины треугольника. Я сгруппировал их в тех, чьи результаты должны быть True
и те, которые должны бытьFalse
.
True
экземпляры:
[(-0.31961, -0.12646), (0.38478, 0.37419), (-0.30613, -0.59754), (-0.85548, 0.6633)]
[(-0.87427, -0.00831), (0.78829, 0.60409), (-0.90904, -0.13856), (-0.80685, 0.48468)]
[(0.28997, -0.03668), (-0.28362, 0.42831), (0.39332, -0.07474), (-0.48694, -0.10497)]
[(-0.07783, 0.04415), (-0.34355, -0.07161), (0.59105, -0.93145), (0.29402, 0.90334)]
[(0.36107, 0.05389), (0.27103, 0.47754), (-0.00341, -0.79472), (0.82549, -0.29028)]
[(-0.01655, -0.20437), (-0.36194, -0.90281), (-0.26515, -0.4172), (0.36181, 0.51683)]
[(-0.12198, -0.45897), (-0.35128, -0.85405), (0.84566, 0.99364), (0.13767, 0.78618)]
[(-0.03847, -0.81531), (-0.18704, -0.33282), (-0.95717, -0.6337), (0.10976, -0.88374)]
[(0.07904, -0.06245), (0.95181, -0.84223), (-0.75583, -0.34406), (0.16785, 0.87519)]
[(-0.33485, 0.53875), (-0.25173, 0.51317), (-0.62441, -0.90698), (-0.47925, 0.74832)]
False
экземпляры:
[(-0.99103, 0.43842), (0.78128, -0.10985), (-0.84714, -0.20558), (-0.08925, -0.78608)]
[(0.15087, -0.56212), (-0.87374, -0.3787), (0.86403, 0.60374), (0.01392, 0.84362)]
[(0.1114, 0.66496), (-0.92633, 0.27408), (0.92439, 0.43692), (0.8298, -0.29647)]
[(0.87786, -0.8594), (-0.42283, -0.97999), (0.58659, -0.327), (-0.22656, 0.80896)]
[(0.43525, -0.8923), (0.86119, 0.78278), (-0.01348, 0.98093), (-0.56244, -0.75129)]
[(-0.73365, 0.28332), (0.63263, 0.17177), (-0.38398, -0.43497), (-0.31123, 0.73168)]
[(-0.57694, -0.87713), (-0.93622, 0.89397), (0.93117, 0.40775), (0.2323, -0.30718)]
[(0.91059, 0.75966), (0.60118, 0.73186), (0.32178, 0.88296), (-0.90087, -0.26367)]
[(0.3463, -0.89397), (0.99108, 0.13557), (0.50122, -0.8724), (0.43385, 0.00167)]
[(0.88121, 0.36469), (-0.29829, 0.21429), (0.31395, 0.2734), (0.43267, -0.78192)]