У меня есть два списка, которые на самом деле две плоские кривые. Например:
XY = [[1.0,0.0],[1.0,0.5],[0.0,1.0]]
YZ = [[0.0,1.0],[1.0,0.0]]
И цель состоит в том, чтобы создать трехмерный список точек из этих двух кривых. В этом случае кривая результата будет выглядеть так: И список результатов будет выглядеть примерно так:
XYZ = [[1.0,0.0,1.0],[1.0,0.5,0.5],[0.0,1.0,0.0]]
У меня была идея сгенерировать поверхность изатем вычислите пересечение между, но не уверены, что это самый элегантный и простой способ сделать это. Вот простой код, который я сейчас использую:
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from scipy.interpolate import interp1d
nPoints = 100
XY = [[1.0,0.0],[1.0,0.5],[0.0,1.0]]
YZ = [[0.0,1.0],[1.0,0.0]]
XY = list(map(list, zip(*XY)))
YZ = list(map(list, zip(*YZ)))
XY_interp = interp1d(XY[1],XY[0],fill_value='extrapolate')
YZ_interp = interp1d(YZ[0],YZ[1],fill_value='extrapolate')
yRange = np.linspace(min(XY[1]),max(XY[1]),nPoints)
LE = [[XY_interp(y),y,YZ_interp(y)] for y in yRange]
LE = list(map(list, zip(*LE)))
figsize = [20,10]
x = np.linspace(0,0,len(YZ))
ax = plt.figure(figsize=figsize).gca(projection='3d')
ax.plot(XY[0],XY[1],c='blue',label='XY plane curve')
ax.plot(x,YZ[0],YZ[1],c='red',label='YZ plane curve')
ax.plot(LE[0],LE[1],LE[2],c='black',label='3D result curve')
ax.legend()
plt.tight_layout()
plt.show()
Большое спасибо