Interpolate colors using square of rgbs

This commit is contained in:
Grant Sanderson 2022-12-29 16:07:28 -08:00
parent 124c83d94e
commit 04d3e6a47c

View file

@ -88,7 +88,7 @@ def color_gradient(
alphas_mod1[-1] = 1 alphas_mod1[-1] = 1
floors[-1] = len(rgbs) - 2 floors[-1] = len(rgbs) - 2
return [ return [
rgb_to_color(interpolate(rgbs[i], rgbs[i + 1], alpha)) rgb_to_color(np.sqrt(interpolate(rgbs[i]**2, rgbs[i + 1]**2, alpha)))
for i, alpha in zip(floors, alphas_mod1) for i, alpha in zip(floors, alphas_mod1)
] ]
@ -98,13 +98,13 @@ def interpolate_color(
color2: ManimColor, color2: ManimColor,
alpha: float alpha: float
) -> Color: ) -> Color:
rgb = interpolate(color_to_rgb(color1), color_to_rgb(color2), alpha) rgb = np.sqrt(interpolate(color_to_rgb(color1)**2, color_to_rgb(color2)**2, alpha))
return rgb_to_color(rgb) return rgb_to_color(rgb)
def average_color(*colors: ManimColor) -> Color: def average_color(*colors: ManimColor) -> Color:
rgbs = np.array(list(map(color_to_rgb, colors))) rgbs = np.array(list(map(color_to_rgb, colors)))
return rgb_to_color(rgbs.mean(0)) return rgb_to_color(np.sqrt((rgbs**2).mean(0)))
def random_color() -> Color: def random_color() -> Color: