Я рисую в matplotlib. Я хочу удалить круг на плоскостях, где они пересекаются с катеноидными поверхностями. Можно жестко запрограммировать пересечение, если оно выглядит нормально.
импортировать numpy как np импортировать matplotlib.pyplot как plt из mpl_toolkits.mplot3d импортировать Axes3D # Параметрические уравнения для поверхности катеноида def catenoid(u, v, a=1): x = a * np.cosh(u/a) * np.cos(v) y = a * np.cosh(u/a) * np.sin(v) г = ты вернуть x, y, z # Генерируем значения u и v и = np.linspace(-2, 2, 100) v = np.linspace(0, 2 * np.pi, 100) и, v = np.meshgrid(u, v) # Создаем фигуру рис = plt.figure(figsize=(12, 12)) ax = fig.add_subplot(111, Projection="3d", Computed_zorder=False) ax.set_box_aspect(аспект=(6, 4, 3)) ax.set_axis_off() # Постройте первую поверхность катеноида без линий сетки x1, y1, z1 = катеноид(u, v) surf1 = ax.plot_surface(x1, y1, z1, cmap='viridis', Edgecolor='grey', Alpha=0.5, vmin=-2, vmax=2) # Постройте вторую поверхность катеноида со смещением по оси Y без линий сетки. x2, y2, z2 = катеноид(u, v) x2_offset = x2 + 8 # Отрегулируйте значение смещения по мере необходимости surf2 = ax.plot_surface(x2_offset, y2, z2, cmap='viridis', Edgecolor='grey', Alpha=0.5, vmin=-2, vmax=2) # Постройте первую плоскость с верхними и нижними цветами первой поверхности катеноида xx, yy = np.meshgrid(np.linspace(-5, 13, 100), np.linspace(-5, 5, 100)) зз = гг * 0 - 2 ax.plot_surface(xx, yy, zz, zorder=-1, альфа=0,5, cmap='viridis', Edgecolor='none', vmin=-2, vmax=2) зз = уу * 0 + 2 ax.plot_surface(xx, yy, zz, zorder=1, альфа=0,5, cmap='viridis', Edgecolor='none', vmin=-2, vmax=2) #Показать сюжет plt.show() На данный момент это выглядит так:

Я хочу избавиться от серых частей, чтобы плоскость не закрывала катеноидные отверстия:

Мобильная версия