mirror of http://CODE.RHODECODE.COM/u/O/O/O
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
35 lines
1.2 KiB
35 lines
1.2 KiB
import plotly.graph_objects as go |
|
import numpy as np |
|
|
|
# Define the curvature function |
|
def kappa(x): |
|
return (1-((-((-1)**np.floor(x/np.pi*2)*(np.exp(-1/((x/np.pi*2)-np.floor((x/np.pi*2)))) |
|
/(np.exp(-1/((x/np.pi*2)-np.floor((x/np.pi*2))))+np.exp(-1/(1-(x/np.pi*2)+np.floor((x/np.pi*2))))))) + |
|
((-1)**np.floor((x/np.pi*2)/1)*(np.exp(-1/(1-(x/np.pi*2)+np.floor((x/np.pi*2))))/(np.exp(-1/((x/np.pi*2)- |
|
np.floor((x/np.pi*2))))+np.exp(-1/(1-(x/np.pi*2)+np.floor((x/np.pi*2))))))))/2 + .5)) |
|
|
|
# Generate x values |
|
x_vals = np.linspace(0, 4*np.pi, 1000) |
|
|
|
# Compute kappa values |
|
kappa_vals = kappa(x_vals) |
|
|
|
# Integrate kappa values to get theta values (angles) |
|
theta_vals = np.cumsum(kappa_vals) * (x_vals[1]-x_vals[0]) |
|
|
|
# Compute x and y coordinates of the curve |
|
x_coords = np.cumsum(np.cos(theta_vals)) * (x_vals[1]-x_vals[0]) |
|
y_coords = np.cumsum(np.sin(theta_vals)) * (x_vals[1]-x_vals[0]) |
|
|
|
# Create a plot using plotly |
|
fig = go.Figure() |
|
|
|
# Add line to the figure for the curve |
|
fig.add_trace(go.Scatter(x=x_coords, y=y_coords, mode='lines', name='Curve')) |
|
|
|
# Update layout |
|
fig.update_layout( |
|
autosize=True, |
|
xaxis=dict(scaleanchor='y', scaleratio=1) # this line sets the aspect ratio |
|
) |
|
fig.show() |