Я хочу визуализировать цветовое пространство HSV на графике 3D Scatter в Vispy, как изображение в Википедии: https://es.wikipedia.org/wiki/Archivo: HSV_color_solid_cylinder_saturation_gray.png .
Я генерирую случайные точки для цилиндрические координаты, а затем преобразование в XYZ для построения цилиндра и передача исходных точек (в диапазоне 0–1) в виде цветов в Vispy.
Я получаю слишком мало цветов. Что я могу сделать, чтобы получить изображение, похожее на изображение из Википедии?
![My HSV cylinder](https://i.stack.imgur.com/ZHpoE.png)
from vispy.color import ColorArray
import numpy as np
import vispy.scene
def scale(arr):
""" Scale to 0-1 range """
return (arr - np.min(arr)) / (np.max(arr) - np.min(arr))
N = 120000
radius = np.random.rand(N, 1)
theta = np.deg2rad(360 * np.random.rand(N, 1))
altitude = np.random.rand(N, 1)
# From Cylindrical to Cartesian coordinates
x = radius * np.cos(theta)
y = radius * np.sin(theta)
z = altitude
color1 = scale(theta)
color2 = radius
color3 = altitude
Scatter3D = vispy.scene.visuals.create_visual_node(vispy.visuals.MarkersVisual)
canvas = vispy.scene.SceneCanvas(keys='interactive', show=True)
view = canvas.central_widget.add_view()
view.camera = 'turntable'
view.camera.distance = 5
pos = np.concatenate([x,y,z], axis=1)
colors = ColorArray(color=np.concatenate([color1, color2, color3], axis=1), color_space='hsv')
sizes = 5 * np.ones((N,1))
p1 = Scatter3D(parent=view.scene)
p1.set_gl_state('translucent', blend=True, depth_test=True)
p1.set_data(pos,
face_color=colors,
symbol='o',
size=sizes[:,0],
edge_width=0.5,
edge_color=None
)
axis = vispy.scene.visuals.XYZAxis(parent=view.scene)
vispy.app.run()