Skip to content

Instantly share code, notes, and snippets.

@dirediredock
Created May 3, 2022 18:26
Show Gist options
  • Save dirediredock/f26d3b00abb528f4c679096139434a8e to your computer and use it in GitHub Desktop.
Save dirediredock/f26d3b00abb528f4c679096139434a8e to your computer and use it in GitHub Desktop.
# by Matias I. Bofarull Oddo - 2022.05.03
from math import pi, cos, sin
from matplotlib.widgets import Slider
import matplotlib.pyplot as plt
plt.rcParams["font.sans-serif"] = "Consolas"
plt.rcParams["font.weight"] = "bold"
plt.rcParams["font.size"] = 10
phi = (1 + (5 ** (1 / 2))) / 2 - 1
def get_points(var1, var2, number_of_points=1000):
X = []
Y = []
for i in range(number_of_points):
angle = i * 2 * pi * var1
distance = (i / (number_of_points)) ** var2
X.append(distance * cos(angle))
Y.append(distance * sin(angle))
return X, Y
def update(val):
turn_fraction = var1_slider.val
distance_power = var2_slider.val
coord_x, coord_y = get_points(turn_fraction, distance_power)
Plot.set_xdata(coord_x)
Plot.set_ydata(coord_y)
fig.canvas.draw_idle()
initial_x, initial_y = get_points(phi, 1)
fig = plt.figure(figsize=(10, 10))
(Plot,) = plt.plot(initial_x, initial_y, "o", markersize=5)
edge = max([max(initial_x), max(initial_y)])
margin = 0.1
plt.axis("off")
plt.xlim(-edge - (margin * edge), edge + (margin * edge))
plt.ylim(-edge - (margin * edge), edge + (margin * edge))
plt.gca().set_position([0, 0.02, 1, 0.98])
slider = plt.axes([0.02, 0.03, 0.9, 0.01])
var1_slider = Slider(slider, "", 0.5, 1, valinit=phi, valstep=0.0001)
slider = plt.axes([0.02, 0.015, 0.9, 0.01])
var2_slider = Slider(slider, "", 0, 2, valinit=1, valstep=0.0001)
var1_slider.on_changed(update)
var2_slider.on_changed(update)
plt.show()
@dirediredock
Copy link
Author

interactive_slider.mov

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment