Рассмотрим стандартный равносторонний треугольник с узлами, помеченными с использованием барицентрических координат :
Мы можем превратить этот треугольник с 3 узлами в треугольник с 6 узлами, добавив новую линию из 3 вершин (на одну больше, чем было на стороне исходного треугольника с 3 узлами), удалив все внутренние ребра (но не внутренние узлы) и повторно нормализовать координаты:
Повторяя процесс, чтобы перейти от треугольника с 6 узлами к треугольнику с 10 узлами, добавить линию из 4 вершин (опять же, на одну больше, чем было на стороне исходного треугольника с 6 узлами), удалить все внутренние ребра (но не внутренние узлы). ) и заново нормализовать координаты:
Этот процесс может повторяться до бесконечности. Целью этой задачи является целое число, N
представляющее, сколько раз этот процесс был выполнен, выводить все узлы для соответствующего треугольника в барицентрических координатах.
вход
Ваша программа / функция должна принимать в качестве входных данных одно неотрицательное целое число, N
представляющее, сколько раз этот процесс применялся. Обратите внимание, что для N=0
, вы должны вывести исходный треугольник с 3 узлами.
Вход может поступать из любого источника (параметр функции, stdio и т. Д.).
Выход
Ваша программа / функция должна выводить все узлы в нормализованных барицентрических координатах. Порядок узлов не имеет значения. Число может быть задано в виде дроби (сокращение дроби не требуется) или числа с плавающей запятой. Вы также можете вывести «масштабированные» векторы, чтобы указать узел. Например, все 3 из следующих выходов эквивалентны и разрешены:
0.5,0.5,0
1/2,2/4,0
[1,1,0]/2
Если вы используете вывод с плавающей запятой, ваш вывод должен быть точным с точностью до 1%. Выход может быть для любого желаемого приемника (stdio, возвращаемого значения, возвращаемого параметра и т. Д.). Обратите внимание, что хотя барицентрические координаты однозначно определяются только 2 числами на узел, вы должны вывести все 3 числа на узел.
Примеры
Примеры случаев отформатированы как:
N
x0,y0,z0
x1,y1,z1
x2,y2,z2
...
где первая строка является входом N
, а все последующие строки образуют узел, x,y,z
который должен быть на выходе ровно один раз. Все числа даны как приблизительные числа с плавающей точкой.
0
1,0,0
0,1,0
0,0,1
1
1,0,0
0,1,0
0,0,1
0.5,0,0.5
0.5,0.5,0
0,0.5,0.5
2
1,0,0
0,1,0
0,0,1
0.667,0,0.333
0.667,0.333,0
0.333,0,0.667
0.333,0.333,0.333
0.333,0.667,0
0,0.333,0.667
0,0.667,0.333
3
1,0,0
0.75,0,0.25
0.75,0.25,0
0.5,0,0.5
0.5,0.25,0.25
0.5,0.5,0
0.25,0,0.75
0.25,0.25,0.5
0.25,0.5,0.25
0.25,0.75,0
0,0,1
0,0.25,0.75
0,0.5,0.5
0,0.75,0.25
0,1,0
счет
Это код гольф; выигрывает самый короткий код в байтах. Применяются стандартные лазейки. Вы можете использовать любые встроенные модули по желанию.
[1,2,3]/6
?