Обновить

Комментарии 12

За енота спасибо.

Откуда у вас план моего микрорайона?

Это геометрическое подобие ? или даже самоподобие, как у фракталов.

То что правильный треугольник нельзя нарисовать по точкам - это понятно. А как обстоит дело с правильными тетраэдрами (симплексами) в других размерностях? Ни для кого не секрет, что в любой размерности вида N = k^2 - 1 можно расположить N вершин тетраэдра на координатных осях на расстоянии (k-1) от нуля, а оставшуюся вершину - в точке (1, 1, ..., 1).

В прочих размерностях, если они четные, объем симплекса иррациональный, хотя должен быть рациональным (ведь такой симплекс можно порезать на ориентированные по осям прямоугольные симплексы с вершинами в рациональных точках, имеющие рациональный объем). В нечетных размерностях можно легко добиться рационального объема, при условии что длина ребра содержит определенный радикал, например, в 5D это должен быть корень из 3. Но что-то подобрать координаты пока не удалось.

Очень качественный цикл статей. Всё-таки, именно красота математики и влюбляет в нее

Мне показалось немного странным говорить о гауссовых числах, но ничего не сказать о комплексной плоскости. Понятно, что материал для детей, но дети в школе, а на хабре аудитория чуть повзрослее. Соответственно, и вопросы стоят чуть другие — например, не просто нарисовать вектор с углом, а аппроксимировать произвольный угол или длину вектора в пределах заданной точности, а значения например ограничить простыми числами. Ну или как площадь таких многоугольников посчитать без тригонометрии, ждал этого в статье.

Вы правы! В таких случаях непросто понять, где начать (последовательно ввести комплексные числа, или счесть, что это уже известно) и где остановиться (остановиться на квадратных решётках или увлечься и рассказать про числа Эйзенштейна или опространственных решётках и дойти до обобщённой теоремы Пика).

Опять же, формула Пика достаточно наглядна, когда многоугольник нарисован на тетрадном листочке, и пересчитать узлы вручную довольно просто. Но как это сделать алгоритмически? Когда вершины многоугольника задаются не визуально, а конкретными гауссовыми числами. Интуиция подсказывает, что считать узлы это не единственный путь, а формулу Пика можно использовать для обоснования корректности округления результата с шагом 1/2.

Для алгоритмического вычисления площади многоугольника, заданного списком координат вершин, мне кажется, лучше не гауссовыми числами воспользоваться, а векторным произведением, "пройдя" из одной вершины по всем прочим, и вычислив ротор единичного потока. При этом для n-угольника сложность O(n), тригонометрия не всплывает, а целочисленность координат особой роли не играет. Но я не могу сказать, что крепко подумал перед тем, как написать этот комментарий, возможно, есть идеи и получше.

Есть идеи как минимум попроще. Разбить многоугольник на треугольники, а их площадь считать сразу через координаты, результаты суммировать. Целочисленность координат играет роль для уверенности в предельной точности полученного результата и возможности хранить его в целочисленном типе данных, поскольку множитель 1/2 можно вынести за скобки, а умножение целых чисел на целые гарантированно дадут целый результат (ну и с рациональными так же).

function area(pts)
    (x0,y0) = pts[1]
    res = 0
    for i in 2:length(pts)-1
        (x1,y1) = pts[i]
        (x2,y2) = pts[i+1]
        res += (x1-x0)*(y2-y0)-(y1-y0)*(x2-x0)
    end
    return res/2
end

Мой способ с ротором только звучит страшно, а по сути является разбиением на треугольники, и вычисляется не сложнее, чем любой из способов, приведённых в материале по вашей ссылке.

Статья про ротор из Википедии выглядит страшной даже для взрослого человека. Никогда не понимал, зачем усложнять то, что можно упростить.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации