import numpy as np
[docs]
def cartesian_to_polar(x, y):
rho = np.sqrt(x**2 + y**2)
phi = np.arctan2(y, x)
return rho, phi
[docs]
def polar_to_cartesian(rho, phi):
x = rho * np.cos(phi)
y = rho * np.sin(phi)
return x, y
[docs]
def logarithmic_spiral(xs, alpha, beta):
phi = xs
# Transform
rho = alpha * np.exp(beta*phi)
# Convert to cartesian
xs, ys = polar_to_cartesian(rho=rho, phi=phi)
return xs, ys
[docs]
def rotate(xs, ys, theta):
# Convert to polar
rho, phi = cartesian_to_polar(x=xs, y=ys)
# Rotate
phi = phi + theta
# Convert to cartesian
xs, ys = polar_to_cartesian(rho=rho, phi=phi)
return xs, ys
[docs]
def tangent(f, f_prime, x_0):
return lambda x: x*f_prime(x_0) + f(x_0) - x_0*f_prime(x_0)
[docs]
def normal(f, f_prime, x_0):
return lambda x: (-1/f_prime(x_0))*(x-x_0) + f(x_0)