2022-04-07 18:46:57 +02:00

376 lines
9.7 KiB
Plaintext

{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"id": "bcb9c6df-0417-4d0a-9990-185ce07b918b",
"metadata": {},
"outputs": [],
"source": [
"import numpy as np\n",
"import meshplot as mp"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "45981306-4fde-431e-9240-3d153a016863",
"metadata": {},
"outputs": [],
"source": [
"import igl\n",
"import scipy as sp\n",
"import numpy as np\n",
"from meshplot import plot, subplot, interact\n",
"import time\n",
"import copy\n",
"import matplotlib.pyplot as plt"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "c39ddea4-e782-4c2b-a942-ec11610a4ceb",
"metadata": {},
"outputs": [],
"source": [
"import sys\n",
"sys.path.append('../src')"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "f58fb451-bdcf-49d7-a928-4992ab599761",
"metadata": {},
"outputs": [],
"source": [
"import importlib, utils, laplacian_utils, mean_curvature_flow, remesher_helper\n",
"importlib.reload(utils)\n",
"importlib.reload(laplacian_utils)\n",
"importlib.reload(mean_curvature_flow)\n",
"importlib.reload(remesher_helper)\n",
"from utils import parse_input_mesh, normalize_area, get_diverging_colors, plot_directions\n",
"from mean_curvature_flow import MCF\n",
"import smooth_surfaces"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "bb26ed62-f404-437f-977a-8ff22a19f840",
"metadata": {},
"outputs": [],
"source": [
"from fitting import compute_mesh_principal_curvatures"
]
},
{
"cell_type": "markdown",
"id": "8b12d84d-06a1-4315-87b2-d8bb4a6b4360",
"metadata": {},
"source": [
"### Closed Surface Example"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "cf187b60-2fbf-4f0b-9924-efe4939bafae",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"Warning: readOBJ() ignored non-comment line 3:\n",
" o Mesh\n"
]
}
],
"source": [
"v, f, num_bdry_vx, num_intr_vx = parse_input_mesh(\"../data/bob_tri.obj\")\n",
"curr_mcf = MCF(num_bdry_vx, num_intr_vx)"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "dcf12908-b20c-4a1c-adcf-492d23a54011",
"metadata": {},
"outputs": [],
"source": [
"k1, k2, d1, d2 = compute_mesh_principal_curvatures(v, f)"
]
},
{
"cell_type": "markdown",
"id": "b3294e38-ccac-4fbc-8661-71403e472cc6",
"metadata": {},
"source": [
"### Gaussian Curvature"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "cf601268-72af-4964-940d-211719f3123c",
"metadata": {},
"outputs": [
{
"ename": "TypeError",
"evalue": "unsupported operand type(s) for +: 'NoneType' and 'NoneType'",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m/tmp/ipykernel_12120/1640637150.py\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mgaussian_curvature\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mk1\u001b[0m\u001b[0;34m+\u001b[0m\u001b[0mk2\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 2\u001b[0m \u001b[0mgaussian_curvature\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0mnum_bdry_vx\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m*=\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[0mgp\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mmp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mplot\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mv\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mf\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mget_diverging_colors\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mgaussian_curvature\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;31mTypeError\u001b[0m: unsupported operand type(s) for +: 'NoneType' and 'NoneType'"
]
}
],
"source": [
"gaussian_curvature = k1+k2\n",
"gaussian_curvature[:num_bdry_vx] *= 0\n",
"gp = mp.plot(v, f, get_diverging_colors(gaussian_curvature))"
]
},
{
"cell_type": "markdown",
"id": "4a3a46af-15b0-4b8c-afd4-14159774a646",
"metadata": {},
"source": [
"### Mean Curvature"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "003d4541-fff5-414d-bacf-36a8a45fb412",
"metadata": {},
"outputs": [],
"source": [
"mean_curvature = (k1+k2)/2\n",
"mean_curvature[:num_bdry_vx] *= 0\n",
"gp = mp.plot(v, f, get_diverging_colors(mean_curvature))"
]
},
{
"cell_type": "markdown",
"id": "3e30eb7f-4c81-461a-a9db-c1df00eb30ec",
"metadata": {},
"source": [
"### Principal Curvature Direction"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "433424ef-f93c-485f-9929-17b84fd96026",
"metadata": {},
"outputs": [],
"source": [
"plot_directions(v, f, d1, d2, scale=0.08)"
]
},
{
"cell_type": "markdown",
"id": "5a8c19a9-a4ff-4fcf-99f8-017c4cc97b7b",
"metadata": {},
"source": [
"### Asymptotic Direction"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "08194caa-c825-4445-afcb-c11ae7c87b10",
"metadata": {},
"outputs": [],
"source": [
"a1, a2 = smooth_surfaces.compute_asymptotic_directions(k1, k2, d1, d2)"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "d2b75928-f37e-4342-bebc-bcf00fcd9fbb",
"metadata": {},
"outputs": [],
"source": [
"plot_directions(v, f, a1, a2, scale=0.08)"
]
},
{
"cell_type": "markdown",
"id": "c6675cc3-281d-4de0-96e9-b679c19bea56",
"metadata": {},
"source": [
"## Minimal Surface Example"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "10519def-3402-401f-ad08-8c2e120d11e2",
"metadata": {},
"outputs": [],
"source": [
"epsilon1 = 5e-2\n",
"epsilon2 = 1e-3"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "9d97b409-968f-4398-a28e-749ae1af28d3",
"metadata": {},
"outputs": [],
"source": [
"v2, f2, num_bdry_vx, num_intr_vx = parse_input_mesh(\"../data/two_rings_remesh.obj\")\n",
"curr_mcf = MCF(num_bdry_vx, num_intr_vx)"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "887806bf-1c10-44b7-b0f8-acd398187678",
"metadata": {},
"outputs": [],
"source": [
"start = time.time()\n",
"vs, average_mean_curvature_list1 = curr_mcf.run_mean_curvature_flow(v2, f2, 1000, epsilon1, epsilon2)\n",
"print(\"Run {} iterations of unstable mean curvature flow\".format(len(average_mean_curvature_list1)))\n",
"print(\"took {} seconds\".format(time.time() - start))"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "d0cd92a5-8848-4a7e-9b93-34b4b9d0967b",
"metadata": {},
"outputs": [],
"source": [
"k1, k2, d1, d2 = compute_mesh_principal_curvatures(vs[-1], f2)"
]
},
{
"cell_type": "markdown",
"id": "6c3bb956-62d0-43f7-a0a0-30571933c97a",
"metadata": {},
"source": [
"### Gaussian Curvature"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "785540b8-03ed-4620-9a8f-ad7f9ec4d154",
"metadata": {},
"outputs": [],
"source": [
"gaussian_curvature = k1+k2\n",
"gaussian_curvature[:num_bdry_vx] *= 0\n",
"gp = mp.plot(vs[-1], f2, get_diverging_colors(gaussian_curvature, percentile=80))"
]
},
{
"cell_type": "markdown",
"id": "a84dcd14-6dd4-44fe-93e8-440d78127643",
"metadata": {},
"source": [
"### Mean Curvature"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "b3333375-fc84-4e10-85e0-5b744a3e585a",
"metadata": {},
"outputs": [],
"source": [
"mean_curvature = (k1+k2)/2\n",
"mean_curvature[:num_bdry_vx] *= 0\n",
"gp = mp.plot(vs[-1], f2, get_diverging_colors(mean_curvature))"
]
},
{
"cell_type": "markdown",
"id": "4345e08f-cd16-4644-915d-270d5788bf88",
"metadata": {
"tags": []
},
"source": [
"### Principal Curvature Direction"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "d7b85256-915e-489f-ad7b-f9d2faa9036f",
"metadata": {},
"outputs": [],
"source": [
"plot_directions(vs[-1], f2, d1, d2, scale=0.08)"
]
},
{
"cell_type": "markdown",
"id": "8f7831fe-b870-4ee5-b1e8-6a1081bd17f7",
"metadata": {},
"source": [
"### Asymptotic Direction"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "9674731a-d083-46cf-8ddd-f135538e8217",
"metadata": {},
"outputs": [],
"source": [
"a1, a2 = smooth_surfaces.compute_asymptotic_directions(k1, k2, d1, d2)"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "634c2079-e22a-4458-a126-851a87562015",
"metadata": {},
"outputs": [],
"source": [
"plot_directions(v2, f2, a1, a2, scale=0.08)"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "8fd20a1f-fa62-4762-9697-864874c55a7a",
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.9.7"
}
},
"nbformat": 4,
"nbformat_minor": 5
}