| """ |
| Generate a simple synthetic point cloud (sphere + noise) for quick testing. |
| Run this first if you don't have a scan handy. |
| |
| python example/make_sphere.py |
| """ |
| import numpy as np |
| import os |
|
|
| |
| n = 3000 |
| phi = np.random.uniform(0, 2 * np.pi, n) |
| cos_theta = np.random.uniform(-1, 1, n) |
| sin_theta = np.sqrt(1 - cos_theta ** 2) |
|
|
| x = sin_theta * np.cos(phi) |
| y = sin_theta * np.sin(phi) |
| z = cos_theta |
|
|
| pts = np.stack([x, y, z], axis=1) |
| pts += np.random.normal(0, 0.01, pts.shape) |
|
|
| os.makedirs("example", exist_ok=True) |
|
|
| |
| np.savetxt("example/sphere.xyz", pts, fmt="%.6f") |
|
|
| |
| n_verts = len(pts) |
| header = f"""ply |
| format ascii 1.0 |
| element vertex {n_verts} |
| property float x |
| property float y |
| property float z |
| end_header |
| """ |
| with open("example/sphere.ply", "w") as f: |
| f.write(header) |
| for v in pts: |
| f.write(f"{v[0]:.6f} {v[1]:.6f} {v[2]:.6f}\n") |
|
|
| print("Created example/sphere.ply (and example/sphere.xyz)") |
| print(f" {n_verts} points on a noisy unit sphere") |
| print("\nNext, run:") |
| print(" python -m lightweightmr -i example/sphere.ply -o example/sphere_mesh.ply --device cpu") |
|
|