Tuesday, 22 April 2025

Iso Surface marching Cube using Python

 


import numpy as np

import matplotlib.pyplot as plt

from skimage import measure

n = 64

x, y, z = np.ogrid[-1:1:n*1j, -1:1:n*1j, -1:1:n*1j]

sphere = x**2 + y**2 + z**2

verts, faces, normals, values = measure.marching_cubes(sphere, level=0.5)

fig = plt.figure(figsize=(6, 6))

ax = fig.add_subplot(111, projection='3d')

mesh = ax.plot_trisurf(

    verts[:, 0], verts[:, 1], faces, verts[:, 2],

    cmap='Spectral', lw=1, alpha=0.9

)

ax.set_title('Iso-Surface Plot (Marching Cubes)')

ax.set_xlabel('X axis')

ax.set_ylabel('Y axis')

ax.set_zlabel('Z axis')

plt.tight_layout()

plt.show()

#source code --> clcoding.com 

Code Explanation:

Libraries Imported

import numpy as np

import matplotlib.pyplot as plt

from skimage import measure

numpy → for numerical calculations and creating 3D grid.

 matplotlib.pyplot → for 3D plotting.

 measure from scikit-image → contains marching_cubes for surface extraction.

Step 1: Create a Scalar Field (3D Grid of Values)

n = 64

x, y, z = np.ogrid[-1:1:n*1j, -1:1:n*1j, -1:1:n*1j]

sphere = x**2 + y**2 + z**2

np.ogrid creates 3D grid coordinates with n = 64 steps in each dimension.

 sphere = x² + y² + z² defines a scalar field that increases with distance from the center.

This effectively creates a spherical shape within the volume.

 Step 2: Extract Iso-Surface Using Marching Cubes

verts, faces, normals, values = measure.marching_cubes(sphere, level=0.5)

marching_cubes() extracts the surface where the scalar field equals 0.5.

 Returns:

 verts: the coordinates of the vertices that form the mesh.

 faces: the triangles that connect those vertices.

 normals: surface normals for shading (not used here).

 values: scalar field values at the vertices (not used here).

 Step 3: Plot the Mesh in 3D

fig = plt.figure(figsize=(10, 8))

ax = fig.add_subplot(111, projection='3d')

Sets up a 3D plot figure and axis.

 mesh = ax.plot_trisurf(

    verts[:, 0], verts[:, 1], faces, verts[:, 2],

    cmap='Spectral', lw=1, alpha=0.9

)

plot_trisurf() creates a triangular surface from the mesh.

 verts[:, 0], verts[:, 1], verts[:, 2] → the x, y, z coordinates of the vertices.

 faces → triangle indices.

 cmap='Spectral' → colorful colormap.

 alpha=0.9 → almost opaque surface.

 Step 4: Labeling and Display

 ax.set_title('Iso-Surface Plot (Marching Cubes)')

ax.set_xlabel('X axis')

ax.set_ylabel('Y axis')

ax.set_zlabel('Z axis')

plt.tight_layout()

plt.show()

Adds axis labels and a title.

 plt.tight_layout() adjusts padding.

 plt.show() renders the final 3D plot.


0 Comments:

Post a Comment

Popular Posts

Categories

100 Python Programs for Beginner (118) AI (152) Android (25) AngularJS (1) Api (6) Assembly Language (2) aws (27) Azure (8) BI (10) Books (251) Bootcamp (1) C (78) C# (12) C++ (83) Course (84) Coursera (298) Cybersecurity (28) Data Analysis (24) Data Analytics (16) data management (15) Data Science (217) Data Strucures (13) Deep Learning (68) Django (16) Downloads (3) edx (21) Engineering (15) Euron (30) Events (7) Excel (17) Finance (9) flask (3) flutter (1) FPL (17) Generative AI (47) Git (6) Google (47) Hadoop (3) HTML Quiz (1) HTML&CSS (48) IBM (41) IoT (3) IS (25) Java (99) Leet Code (4) Machine Learning (186) Meta (24) MICHIGAN (5) microsoft (9) Nvidia (8) Pandas (11) PHP (20) Projects (32) Python (1218) Python Coding Challenge (884) Python Quiz (342) Python Tips (5) Questions (2) R (72) React (7) Scripting (3) security (4) Selenium Webdriver (4) Software (19) SQL (45) Udemy (17) UX Research (1) web application (11) Web development (7) web scraping (3)

Followers

Python Coding for Kids ( Free Demo for Everyone)