История изменений
Исправление KivApple, (текущая версия) :
Я использовал вот этот алгоритм по первой ссылки из гугла по запросу «icosphere generation algorithm»: https://schneide.blog/2016/07/15/generating-an-icosphere-in-c/ (C++)
Следующие 2 ссылки из моего гугла:
https://observablehq.com/@mourner/fast-icosphere-mesh (JavaScript)
http://blog.andreaskahler.com/2009/06/creating-icosphere-mesh-in-code.html (C#)
Все 3 алгоритма используют различные варианты ассоциативного массива чтобы хранить сгенерированные вершины с привязкой из какого ребра она была сгенерирована и избегать появления дупликатов (результатом работы алгоритмов является массив вершин и массив индексов вершин, предлагается использовать indexed rendering для отображения на экране, при этом для 4 итераций подразделения получается примерно 2500 вершин и 5000 треугольников, без индексов было бы 15000 вершин - соответственно, выигрыш по памяти в 2 раза, к тому же в 3 раза меньше математических операций таких как извлечение квадратного корня и деления, но ценой использования хештаблицы, впрочем, в последней редакции моего алгоритма нет переаллокаций и перехеширования, а значит простой поиск в хештаблице должен быть дешевле математических вычислений).
Исправление KivApple, :
Я использовал вот этот алгоритм по первой ссылки из гугла по запросу «icosphere generation algorithm»: https://schneide.blog/2016/07/15/generating-an-icosphere-in-c/ (C++)
Следующие 2 ссылки из моего гугла:
https://observablehq.com/@mourner/fast-icosphere-mesh (JavaScript)
http://blog.andreaskahler.com/2009/06/creating-icosphere-mesh-in-code.html (C#)
Все 3 алгоритма используют различные варианты ассоциативного массива чтобы хранить сгенерированные вершины с привязкой из какого ребра она была сгенерирована и избегать появления дупликатов (результатом работы алгоритмов является массив вершин и массив индексов вершин, предлагается использовать indexed rendering для отображения на экране, при этом для 4 итераций подразделения получается примерно 2500 вершин и 5000 треугольников, без индексов было бы 15000 вершин - соответственно, выигрыш по памяти в 2 раза, к тому же в 3 раза меньше математических операций таких как извлечение квадратного корня и деления, но ценой использования хештаблицы, впрочем, в последней редакции моего алгоритма нет переаллокаций и перехеширования, а простой поиск в хештаблице должен быть дешевле математических вычислений).
Исходная версия KivApple, :
Я использовал вот этот алгоритм по первой ссылки из гугла по запросу «icosphere generation algorithm»: https://schneide.blog/2016/07/15/generating-an-icosphere-in-c/ (C++)
Следующие 2 ссылки из моего гугла:
https://observablehq.com/@mourner/fast-icosphere-mesh (JavaScript)
http://blog.andreaskahler.com/2009/06/creating-icosphere-mesh-in-code.html (C#)
Все 3 алгоритма используют различные варианты ассоциативного массива чтобы хранить сгенерированные вершины с привязкой из какого ребра она была сгенерирована и избегать появления дупликатов (результатом работы алгоритмов является массив вершин и массив индексов вершин, предлагается использовать indexed rendering для отображения на экране, при этом для 4 итераций подразделения получается примерно 2500 вершин и 5000 треугольников, без индексов было бы 15000 вершин - соответственно, выигрыш по памяти в 2 раза).