O-/𖣠⚪ᕤᕦ𖥞ИN𖥞ꖴ𖥞ᙏ𖥞ᗩ𖥞ᴥ𖥞ᕤᕦ𖥞Ⓞ𖥞ᴥ𖥞ߦ𖣓𖡼𖥞𖡼𖥞𖡼𖥞𖡼⚪🞋⚪𖡼𖥞𖡼𖥞𖡼𖥞𖡼𖣓ߦ𖥞ᴥ𖥞Ⓞ𖥞ᕤᕦ𖥞ᴥ𖥞ᗩ𖥞ᙏ𖥞ꖴ𖥞ИN𖥞ᕤᕦ⚪𖣠/⚪ИN⚪Ⓞ⚪옷⚪✤⚪人⚪ߦ⚪𖡼⚪𖡼⚪𖡼⚪𖡼⚪𖡼⚪𖡼⚪ߦ⚪人⚪✤⚪옷⚪Ⓞ⚪ИN⚪/⚪ᴥ⚪ᗱᗴ⚪✤⚪人⚪ߦ⚪ᑎ⚪ᒍᒐ⚪𖡼⚪𖡼⚪𖡼⚪𖡼⚪𖡼⚪𖡼⚪ᒍᒐ⚪ᑎ⚪ߦ⚪人⚪✤⚪ᗱᗴ⚪ᴥ⚪/YP.⚪ᴥ⚪ᗱᗴ⚪✤⚪Ⓞ⚪ᙁ⚪ߦ⚪◯⚪ᗱᗴ⚪ᗯ⚪ᴥ⚪ᑎ⚪ᑐᑕ⚪◯⚪ИN⚪Ⓞ⚪ꖴ⚪✤⚪ᑐᑕ⚪ᑎ⚪ꗳ⚪◯⚪ᗱᗴ⚪ᴥ⚪ᑎ⚪✤⚪ᗩ⚪ᗯ⚪ᴥ⚪ᑎ⚪ᑐᑕ⚪◯⚪ᗝ⚪ᗱᗴ⚪ꖴ⚪ꗳ⚪ꖴ⚪ᑐᑕ⚪ᗱᗴ⚪ߦ⚪ᔓᔕ⚪◌⚪◌⚪◌⚪◌⚪◌⚪◌⚪ᔓᔕ⚪ߦ⚪ᗱᗴ⚪ᑐᑕ⚪ꖴ⚪ꗳ⚪ꖴ⚪ᗱᗴ⚪ᗝ⚪◯⚪ᑐᑕ⚪ᑎ⚪ᴥ⚪ᗯ⚪ᗩ⚪✤⚪ᑎ⚪ᴥ⚪ᗱᗴ⚪◯⚪ꗳ⚪ᑎ⚪ᑐᑕ⚪✤⚪ꖴ⚪Ⓞ⚪ИN⚪◯⚪ᑐᑕ⚪ᑎ⚪ᴥ⚪ᗯ⚪ᗱᗴ⚪◯⚪ߦ⚪ᙁ⚪Ⓞ⚪✤⚪ᗱᗴ⚪ᴥ⚪.PY

52 lines
5.7 KiB
Plaintext
Raw Normal View History

<EFBFBD><EFBFBD>import numpy as np
import plotly.graph_objects as go
from math import *
import mpmath
from ipywidgets import interact, widgets, Text, Layout
formula = Text(value='(1 - cos(((4)/2)*x))/2', layout=Layout(width='100%'),description='<00>&<26><15>&A<16>&N<14>&O<16>&%<1D>&<26>$<24>&<26><><EFBFBD>&<26>%<25>&<26>%<25>&<26>%<25>&<26>%<25>&<26>%<25>&<26>%<25>&<26><><EFBFBD>&<26>$<24>&%<1D>&O<16>&N<14>&A<16>&<26><15>&')
N_slider = widgets.IntSlider(min=1, max=16, value=8,layout=Layout(width='100%'),readout_format='.256f',description='<00>&%<1D>&<26><15><15>&<26><15>&<26>$<24>&<26><07>&<26>%<25>&%<1D>&<26><15><15>&<26>&<26>&O<16>&N<14>&N<00>&<26>%<25>&$'<27>&N<00>&<26><><EFBFBD>&<26>$<24>&km<14>&<26>%<25>&<26>%<25>&<26>%<25>&<26>%<25>&<26>%<25>&<26>%<25>&km<14>&<26>$<24>&<26><><EFBFBD>&N<00>&$'<27>&<26>%<25>&N<00>&N<14>&O<16>&<26>&<26>&<26><15><15>&%<1D>&<26>%<25>&<26><07>&<26>$<24>&<26><15>&<26><15><15>&%<1D>&')
RANGE_FROM_SLIDER=widgets.FloatSlider(min=0, max=4*(4*atan(1)), value=0*(4*atan(1)), step=(4*atan(1))/4, layout=Layout(width='100%'),readout_format='.256f',description='<00>&O<16>&<26>$<24>&%<1D>&<26><><EFBFBD>&<26>%<25>&<26><15><15>&df<15>&N<00>&<26><15>&%<1D>&<26>%<25>&<26>%<25>&<26>%<25>&<26>%<25>&<26>%<25>&<26>%<25>&%<1D>&<26><15>&N<00>&df<15>&<26><15><15>&<26>%<25>&<26><><EFBFBD>&%<1D>&<26>$<24>&O<16>&')
RANGE_TO_SLIDER=widgets.FloatSlider(min=0, max=4*(4*atan(1)), value=4*(4*atan(1)),step=(4*atan(1))/4, layout=Layout(width='100%'),readout_format='.256f',description='<00>&<26>$<24>&$'<27>&<26>%<25>&<26><15><15>&df<15>&N<00>&<26><15>&%<1D>&<26>%<25>&<26>%<25>&<26>%<25>&<26>%<25>&<26>%<25>&<26>%<25>&%<1D>&<26><15>&N<00>&df<15>&<26><15><15>&<26>%<25>&$'<27>&<26>$<24>&')
def clamp(x):
return max(min(1, x), -1)
def kappa(formula, x):
func_dict = {fn: eval(f'lambda *args: mpmath.{fn}(*args)') for fn in dir(mpmath)}
return float(eval(formula, {'x': x, 'clamp': clamp, **func_dict}))
def plot(formula='(1 - cos(((4)/2)*x))/2', RANGE_FROM=0*(4*atan(1)), RANGE_TO=4*(4*atan(1)), N=8):
num_points = 1+2**N
# Generate x values with the specified number of points
x_vals = np.linspace(RANGE_FROM, RANGE_TO, num_points)
# Compute kappa values
kappa_vals = np.array([kappa(formula, x_val) for x_val in x_vals])
theta_vals = np.cumsum(kappa_vals) * (x_vals[1]-x_vals[0]) if num_points > 1 else np.array([0])
x_coords_ = np.cumsum(np.cos(theta_vals)) * (x_vals[1] - x_vals[0]) if num_points > 1 else np.array([0])
y_coords_ = np.cumsum(np.sin(theta_vals)) * (x_vals[1] - x_vals[0]) if num_points > 1 else np.array([0])
# Check if the first point is zero, if not, add it manually
if x_coords_[0] != 0 or y_coords_[0] != 0:
x_coords = np.insert(x_coords_, 0, 0)
y_coords = np.insert(y_coords_, 0, 0)
else:
x_coords = x_coords_
y_coords = y_coords_
fig = go.Figure()
fig.add_trace(go.Scatter(x=x_coords,y=y_coords,mode='lines',line=dict(color='#CECECE'),name='',hovertemplate ='X:%{x:.256f}'+'<br>Y:%{y:.256f}'))
fig.update_layout(
autosize=True,
xaxis=dict(scaleanchor='y',scaleratio=1,gridcolor='#CECECE',zeroline=True,zerolinecolor='#CECECE',tickfont=dict(color='#9C9C9C')),
yaxis=dict( gridcolor='#CECECE',zeroline=True,zerolinecolor='#CECECE',tickfont=dict(color='#9C9C9C')),
hoverlabel=dict(bgcolor="#FFFFFF",font_color='#9C9C9C',bordercolor="#CECECE"),plot_bgcolor='#FFFFFF'
)
fig.show()
# Create the interactive plot
interact(plot, formula=formula, RANGE_FROM=RANGE_FROM_SLIDER, RANGE_TO=RANGE_TO_SLIDER, N=N_slider);