Untitled
unknown
plain_text
2 years ago
1.4 kB
10
Indexable
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
def loft_between_polylines(polyline1, polyline2):
num_vertices1 = len(polyline1)
num_vertices2 = len(polyline2)
# Create a parameter that goes from 0 to 1 for each polyline
t1 = np.linspace(0, 1, num_vertices1)
t2 = np.linspace(0, 1, num_vertices2)
# Interpolate each polyline separately
interpolated_vertices1 = np.array([(1 - t) * vertex1 for t, vertex1 in zip(t1, polyline1)])
interpolated_vertices2 = np.array([t * vertex2 for t, vertex2 in zip(t2, polyline2)])
# Combine the interpolated vertices to create the lofted shape
lofted_shape = interpolated_vertices1 + interpolated_vertices2
return lofted_shape
# Define two example polylines as lists of vertices
polyline1 = np.array([(0, 0, 0), (1, 2, 1), (2, 3, 2), (3, 2, 3)])
polyline2 = np.array([(0, 0, 5), (1, 1, 6), (2, 2, 7)])
# Perform lofting between the polylines
interpolated_vertices = loft_between_polylines(polyline1, polyline2)
# Plot the result in 3D
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.plot(*polyline1.T, marker='o', label='Polyline 1')
ax.plot(*polyline2.T, marker='o', label='Polyline 2')
ax.plot(*interpolated_vertices.T, marker='o', label='Interpolated')
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')
ax.legend()
plt.show()
Editor is loading...