Для работы интерактивной графики (можно крутить мышкой, приближать колёсиком и сдвигать правым кликом, это модуль THREE.js
) в Jupyter
Вам понадобятся следующие команды. Откройте терминал в этой папке (Create new file -> terminal
) и введите:
pip3 install --no-index --find-links ./pythreejs pythreejs
jupyter nbextension install --py --user pythreejs
jupyter nbextension enable --py --user pythreejs
Пишите решения в файле solution.py
на месте пустых функций (где стоит raise NotImplementedError
). В этот раз Вам предстоит работать самостоятельно, задание 2 является необходимым для заданий 3, 4 и 5. Вам предстоит реализовать функции
- (10 баллов)
angleDefect
--- подсчёт дефекта угла в данной вершине. - (10 баллов)
buildLaplacianOperator
--- в качестве опциональных аргументов принимает массив якорей (номеров вершин) и положительное число ---- вес якорей в матрице. Возвращает матрицу оператора Лапласа в видеnumpy
-массива. - (10 баллов)
smoothen
--- сглаживает поверхность при помощиbuildLaplacianOperator
. В качестве опционального аргумента принимает степень сглаживания от 0 до 1, ничего не возвращает --- изменяет координаты вершин внутри класса. - (10 баллов)
transform
--- принимает массив якорей (номеров вершин), массив их координат той же длины и положительное число --- вес якорей в матрице. Аналогично, с помощьюbuildLaplacianOperator
изменяет координаты вершин. - (10 баллов)
dragon
--- в случае эффективной работы функцииsmoothen
илиtransform
на сеткеdragon.obj
Вы можете проиллюстрировать это в отдельной функцииdragon
. Ничего не принимает на вход, ничего не выводит, изменяет координаты вершин согласно Вашей фантазии.
Для просмотра получившийся поверхности Вам нужно запустить Jupyter
-сервер. Зайдите в настройки проекта (значок гаечного ключа) и нажмите внизу страницы Plain Jupyter Server. В нём запустите test.ipynb или создайте свой ноутбук в этой папке. Вам доступны уже готовые сетки teddy.obj
малого размера и dragon.obj
большого, можете создавать свои с помощью конструктора Mesh(faces, vertex_coordinates)
. Код ниже подключит Ваше решение, создаст сетку из файла и отобразит её. Смотрите также test.ipynb
.
import solution
mesh = solution.Mesh.fromobj("teddy.obj")
mesh.draw()