Я пытаюсь построить индикаторную функцию с 2 входными переменными (в данном случае по кругу), которая пересекается некоторой плоскостью.Пересечение дает некоторую кусочно-постоянную функцию с 1 входной переменной.Моя проблема в том, что мой 3D-поверхность не выглядит красиво.Я хотел бы, чтобы график имел:
- Точки (x, y), которые лежат непосредственно на краю круга, также покрыты поверхностью, но из-за скачка вв направлении z цвета перепутаны.Может быть, ни один цвет не будет выглядеть лучше.Я думаю, что для этого нужно разделить данные, но мне не удалось сделать это правильно.
- Я бы хотел, чтобы пересечение 3D-кривой и гиперплоскости было как-то выделено.
Код ниже показывает мои текущие усилия:
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
def circ(x, y, mid = (0.5, 0.5), rad = 0.5):
out = np.zeros(len(x))
for i in range(len(x)):
c = np.sqrt((x[i] - mid[0])**2+(y[i] - mid[1])**2)
if(c < rad):
out[i] = 1
return out
x = np.linspace(-.2,1.2, 100)
y = np.linspace(-.2,1.2, 100)
z = np.linspace(0,1.01, 100)
X, Y = np.meshgrid(x, y)
Xp, Zp = np.meshgrid(x, z)
P = - Xp +1
zs = circ(np.ravel(X), np.ravel(Y))
Z = np.reshape(zs, np.shape(X))
fig = plt.figure()
ax = plt.axes(projection='3d')
ax.plot_surface(X, Y, Z, cmap='Wistia', alpha = .7)
ax.plot_surface(Xp, P, Zp, color = 'blue', alpha = 1.)
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_zlabel('z')
ax.view_init(40, 35)
Получившийся сюжет:

Как вывидите, у меня уже есть «хорошо» решение.Моя главная цель - достичь двух пунктов, которые я упомянул выше.Я также попытался поиграть с альфа-значениями графиков, но хотя я установил его на 1 для графика плоскости, он все еще остается прозрачным.Я очень благодарен за любые рекомендации относительно этого графика, включая цветовую схему, угол и т. Д.