Создать 3D-кривую из двух 2D плоских кривых - PullRequest
0 голосов
/ 28 октября 2019

У меня есть два списка, которые на самом деле две плоские кривые. Например:

XY = [[1.0,0.0],[1.0,0.5],[0.0,1.0]]
YZ = [[0.0,1.0],[1.0,0.0]]

И цель состоит в том, чтобы создать трехмерный список точек из этих двух кривых. В этом случае кривая результата будет выглядеть так: enter image description here И список результатов будет выглядеть примерно так:

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()


Большое спасибо

...