Рассчитайте площадь многоугольника.
Вдохновленный этим алгоритмом шнурка видео.
задача
Ваша задача - создать программу или функцию, которая вычисляет площадь многоугольника. Программа или функция определяется в соответствии с определением по умолчанию в meta.
вход
Вы получите координаты X и Y каждой вершины многоугольника. Вы можете принять входные данные в виде списка кортежей ( [[x1, y1], [x2, y2], etc]
), матрицы или плоского списка ( [x1, y1, x2, y2, etc]
). Также допустимы два списка, содержащие x
и y
координаты соответственно. Вершины нумеруются против часовой стрелки, и первая вершина совпадает с последней предоставленной вершиной, таким образом закрывая многоугольник.
Если вы хотите, вы можете взять ввод без последней вершины (поэтому получите каждую координату только один раз).
Вы можете предположить, что ребра многоугольников не пересекаются. Вы также можете предположить, что все вершины имеют целочисленные координаты.
Выход
Площадь многоугольника. Все стандартные методы вывода разрешены. Если ваш язык не допускает деление с плавающей запятой и решение не будет целочисленным, вы можете вернуть дробь. Дробь не обязательно должна быть упрощена, поэтому возврат 2/4
будет разрешен.
Критерий победы
Самый короткий код выигрывает!
Контрольные примеры
[[4,4],[0,1],[-2,5],[-6,0],[-1,-4],[5,-2],[4,4]]
55
[[1,1],[0,1],[1,0],[1,1]]
0.5
1/2
[x1, x2, x3], [y1, y2, y3]
Разрешен ли ввод как ?Ответы:
Желе ,
86 байт-1 байт благодаря Emigna (избыточный
€
,ÆḊ
имеет левую глубину 2)-1 байт благодаря Emigna, опять же (пополам, с
H
плавающей запятой нет необходимости÷2
)Монадическая ссылка, берущая список пар координат против часовой стрелки согласно примерам (с одним повторением) и возвращающая область.
Попробуйте онлайн!
Как?
Применяет алгоритм шнурка, как описано в видео (которое я тоже смотрел на днях!)
источник
[x,y]
координат они даны по часовой стрелке, а не против часовой стрелки. Вход[[1,1],[0,1],[1,0],[1,1]]
вернет0.5
.H
вместо÷2
Mathematica, 13 байт
источник
Октава , 9 байт
Входные данные - это вектор со значениями x и вектор со значениями y . Это работает и в MATLAB.
Попробуйте онлайн!
источник
JavaScript (ES6),
696747 байтСпасибо @Rick за то, что обратили внимание на то, что нам не нужно абсолютное значение, если вершины гарантированно отсортированы в порядке против часовой стрелки, и за предложение взять плоский список в качестве входных данных, экономя 20 байтов!
Вводит в виде плоского списка вершин, включая последнюю вершину.
Попробуйте онлайн!
Как?
источник
a=>(g=([x,y,...a])=>1-a?0:x*a[1]-y*a[0]+g(a))(a)/2
R,
5452 байтаКоторый оценивает функцию:
Использует предопределенное
F = FALSE = 0
. Реализует алгоритм шнурка в связанном видео :)-2 байта благодаря Джузеппе
источник
i+-1:0
индекса строки+
;)Python 3 ,
7271 байтЗанимает два списка, как это было разрешено в комментариях
Попробуйте онлайн!
Это в основном просто реализация формулы шнурка . Могу ли я получить дополнительные баллы за гольф, который вы на самом деле реализовали бы таким образом? : D
-1, сзади места не нужно
x,y:
.источник
lambda x,y:
нее хорошо.Математика , 31 байт
Попробуйте онлайн!
Mathematica, 25 байтов
источник
JS (ES6),
98959493888682817773 байтаПринимает ввод как
[x1, x2, x3], [y1, y2, y3]
и пропускает повторенную пару координат.-3 байта благодаря @JarkoDubbeldam
-4 байта благодаря @JarkoDubbeldam
-1 байт благодаря @ZacharyT
-4 байта благодаря @ZacharyT
-4 байта благодаря @Rick
источник
J, 12 байт
Предполагая, что вход представляет собой список из 2 списков элементов (то есть, таблицы)
2[\
- разбивает его на шнурки Xs, т. е. перекрывающиеся квадраты по 4 вяза-/ .*
- определитель каждого+/
- суммируй-:
- разделить на 2Если мы получим входные данные в виде единого списка, нам нужно сначала преобразовать в таблицу, что даст нам 20 байтов:
источник
MS-SQL, 66 байт
MS SQL 2008 и выше поддерживают Open Geospatial Consortium (OGC) - стандартные пространственные данные / функции, которыми я пользуюсь здесь.
Входные данные хранятся в поле р из уже существующей таблицы г , в соответствии с нашими стандартами ввода .
Ввод - это текстовое поле с упорядоченными парами в следующем формате:
(4 4,0 1,-2 5,-6 0,-1 -4,5 -2,4 4)
Теперь просто для удовольствия, если вы позволили моей входной таблице содержать стандартные геометрические объекты Open Geospatial Consortium (а не только текстовые данные), то это становится почти тривиальным:
источник
Haskell , 45 байт
Попробуйте онлайн!
источник
Perl 5
-pa
, 62 байтаПопробуйте онлайн!
Принимает ввод в виде списка координат X в первой строке, за которым следует список координат Y во второй строке.
источник