From c2e282c56f1f04b508c5981aacf263b301b522c3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Silvia=20Sell=C3=A1n?= Date: Thu, 18 Jul 2024 09:01:52 -0400 Subject: [PATCH] 2d-test --- src/gpytoolbox/reach_for_the_spheres.py | 14 ++++++++- test/test_reach_for_the_spheres.py | 36 +++++++++++++++++++++++- test/unit_tests_data/switzerland.png | Bin 0 -> 29658 bytes 3 files changed, 48 insertions(+), 2 deletions(-) create mode 100644 test/unit_tests_data/switzerland.png diff --git a/src/gpytoolbox/reach_for_the_spheres.py b/src/gpytoolbox/reach_for_the_spheres.py index e9e3fd08..d1ff5303 100644 --- a/src/gpytoolbox/reach_for_the_spheres.py +++ b/src/gpytoolbox/reach_for_the_spheres.py @@ -664,7 +664,19 @@ def reach_for_the_spheres_iteration(state, state.V = sp.sparse.linalg.spsolve(Q,b) # catching flow singularities so we fail gracefully - if np.any((np.isnan(state.V))) or np.any(doublearea(state.V, state.F)==0) or len(non_manifold_edges(state.F))>0 : + + there_are_non_manifold_edges = False + if dim==3: + there_are_non_manifold_edges = len(non_manifold_edges(state.F))>0 + elif dim==2: + he_nm = np.sort(state.F, axis=1) + # print(he) + he_u_nm = np.unique(he_nm, axis=0, return_counts=True) + # print(he) + ne_nm = he_u_nm[0][he_u_nm[1]>2] + there_are_non_manifold_edges = len(ne_nm)>0 + + if np.any((np.isnan(state.V))) or np.any(doublearea(state.V, state.F)==0) or there_are_non_manifold_edges : if verbose: print("we found a flow singularity. Returning the last converged solution.") diff --git a/test/test_reach_for_the_spheres.py b/test/test_reach_for_the_spheres.py index 50d0dd38..6806129f 100644 --- a/test/test_reach_for_the_spheres.py +++ b/test/test_reach_for_the_spheres.py @@ -1,7 +1,7 @@ from .context import gpytoolbox as gpy from .context import numpy as np from .context import unittest - +import matplotlib.pyplot as plt class TestReachForTheSpheres(unittest.TestCase): def test_beat_marching_cubes_low_res(self): @@ -26,6 +26,40 @@ def test_beat_marching_cubes_low_res(self): # print(f"reach_for_the_spheres h: {h_ours}, MC h: {h_mc} for {mesh} with n={n}") self.assertTrue(h_ours < h_mc) + def test_beat_marching_cubes_2d(self): + png_paths = ["test/unit_tests_data/switzerland.png"] + ns = [10, 20, 30, 50] + for png_path in png_paths: + vv = gpy.png2poly(png_path)[0] + vv = gpy.normalize_points(vv) + vv = 1.0*vv + ec = gpy.edge_indices(vv.shape[0], closed=True) + for n in ns: + gx, gy = np.meshgrid(np.linspace(-1.0, 1.0, n+1), np.linspace(-1.0, 1.0, n+1)) + GV = np.vstack((gx.flatten(), gy.flatten())).T + S = gpy.signed_distance(GV, vv, ec)[0] + plt.scatter(GV[:,0], GV[:,1], c=S) + plt.plot(vv[:,0], vv[:,1], 'r-') + plt.colorbar() + plt.show() + vv_mc, ee_mc = gpy.marching_squares(S, GV, n+1, n+1) + + # plot vv, ee edge by edge + # for i in range(ee_mc.shape[0]): + # plt.plot([vv_mc[ee_mc[i,0],0], vv_mc[ee_mc[i,1],0]], [vv_mc[ee_mc[i,0],1], vv_mc[ee_mc[i,1],1]], 'k-') + + # now run rfts + vv_rfts, ee_rfts = gpy.regular_circle_polyline(10) + sdf = lambda x: gpy.signed_distance(x, vv, ec)[0] + vv_rfts, ee_rfts = gpy.reach_for_the_spheres(GV, sdf, V=vv_rfts, F=ee_rfts, S=S) + # plot vv, ee edge by edge + # for i in range(ee_rfts.shape[0]): + # plt.plot([vv_rfts[ee_rfts[i,0],0], vv_rfts[ee_rfts[i,1],0]], [vv_rfts[ee_rfts[i,0],1], vv_rfts[ee_rfts[i,1],1]], 'g-') + + # plt.axis('equal') + # plt.show() + + def test_noop(self): meshes = ["bunny_oded.obj", "spot.obj", "teddy.obj"] for mesh in meshes: diff --git a/test/unit_tests_data/switzerland.png b/test/unit_tests_data/switzerland.png new file mode 100644 index 0000000000000000000000000000000000000000..65438c4fa0c83bdc06e463f62c232f607485a862 GIT binary patch literal 29658 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≤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 literal 0 HcmV?d00001