élasticité, geometrie
L'installation Elasticité dynamique agit comme un filtre et génère de nouveaux espaces démultipliés, comme un empilement quasi infini d'horizons. Par principe de réflexion, la pièce absorbe l'image de l'environnement et accumule les points de vue ; le mouvement permanent requalifie continuellement ce qui est regardé et entendu.
Ce post implémente une configuration favorisant des angles droits.
In [1]:
%load_ext autoreload
%autoreload 2
In [2]:
import elasticite as el
import numpy as np
duration = el.get_default_args(el.EdgeGrid.render)['duration']
angles perpendiculaires¶
In [3]:
%%writefile ../scenario_line_geometry.py
#!/usr/bin/env python
# -*- coding: utf8 -*-
import elasticite as el
import numpy as np
class EdgeGrid(el.EdgeGrid):
def champ(self):
if self.structure: N_lame = self.N_lame-self.struct_N
else: N_lame = self.N_lame
force = np.zeros_like(self.lames[2, :N_lame])
damp_min = 0.5
damp_tau = 10.
damp = lambda t: damp_min + (1.-damp_min)*np.exp(-np.abs(np.mod(t+self.period/2, self.period)-self.period/2)/damp_tau)
smooth_tau = 15
smooth = lambda t: 1.-np.exp(-np.abs(np.mod(t+self.period/2, self.period)-self.period/2)**2/smooth_tau**2)
damp_angle_tau = 8.
damp_angle = lambda t: 1.-np.exp(-(np.mod(t+self.period/2, self.period)-self.period/2)**2/2/damp_angle_tau**2)
xf = lambda t: location[0]
zf = lambda t: location[2] + 3.5 * np.sin(2*np.pi*(t)/self.period)
noise = lambda t: .5 * smooth(t)#* np.exp((np.cos(2*np.pi*((t-0.) / 6. + x))-1.)/ .1**2)
#damp = lambda t: 0.001 #* np.exp(np.cos(t / 6.) / 3.**2)
colin_t = lambda t: -.2 * smooth(t) #*np.exp((np.cos(2*np.pi*((t-3.) / 6. + y))-1.)/ .3**2)
colin_d = lambda d: np.exp(-d**2/2/.25**2) #np.exp(-np.log((d+1.e-12)/.05)**2/2/1.5)
#delta_angle = np.mod(self.angle_relatif()-np.pi/3., 2*np.pi/3)
delta_angle = self.angle_relatif()[:N_lame, :N_lame]-np.pi/2.
#delta_angle *= np.sign(delta_angle)
D = self.distance(do_torus=True)[:N_lame, :N_lame]
force += 1. * colin_t(self.t) * np.sum(np.sin(2*delta_angle)*colin_d(D), axis=1) * smooth(self.t)
#force += force_/np.abs(force_**2).sum()
force -= 12 * (np.mod(self.lames[2, :N_lame]+np.pi/2, np.pi) - np.pi/2) * (1- smooth(self.t) )
force += noise(self.t)*np.pi*np.random.randn(N_lame)
force -= damp(self.t) * self.lames[3, :N_lame]/self.dt
force *= .03
force = 2. * np.tanh(force)
return force
if __name__ == "__main__":
import sys
if len(sys.argv)>1: mode = sys.argv[1]
else: mode = 'both'
filename = None
filename = 'mat/line_geometry.npy'
e = EdgeGrid(N_lame=25, grid_type='line', mode=mode, verb=False, filename=filename, period=4*60.)
el.main(e)
In [4]:
%cd ..
!rm mat/line_geometry.npy
%run scenario_line_geometry.py writer
%cd posts
In [5]:
import matplotlib
%matplotlib inline
import matplotlib.pyplot as plt
z = np.load('../mat/line_geometry.npy')
fig, ax = plt.subplots(figsize=(15, 3))
#_ = ax.plot(z[:, 0])
_ = ax.plot(z[:, 0], z[:, 1:])
45 deg¶
In [6]:
%%writefile ../scenario_line_geometry_45deg.py
#!/usr/bin/env python
# -*- coding: utf8 -*-
import elasticite as el
import numpy as np
class EdgeGrid(el.EdgeGrid):
def champ(self):
if self.structure: N_lame = self.N_lame-self.struct_N
else: N_lame = self.N_lame
force = np.zeros_like(self.lames[2, :N_lame])
damp_min = 0.4
damp_tau = 14.
damp = lambda t: damp_min + (1.-damp_min)*np.exp(-np.abs(np.mod(t+self.period/2, self.period)-self.period/2)/damp_tau)
smooth = lambda t: 1.-np.exp(-np.abs(np.mod(t+self.period/2, self.period)-self.period/2)**2/damp_tau**2)
on_off = lambda t, freq: (np.sin(2*np.pi*t/self.period*freq) > 0.)
noise = lambda t: .5 * smooth(t)
force -= 7.5 * (np.mod(self.lames[2, :N_lame]+np.pi/2, np.pi) - np.pi/2 -np.pi/4) *smooth(self.t) *on_off(self.t, 3)
force -= 40 * (np.mod(self.lames[2, :N_lame]+np.pi/2, np.pi) - np.pi/2) * (1- smooth(self.t) ) *(1-on_off(self.t, 3))
force += noise(self.t)*np.pi*np.random.randn(N_lame)
force -= damp(self.t) * self.lames[3, :N_lame]/self.dt
force *= .01
force = 2 * np.tanh(force)
return force
if __name__ == "__main__":
import sys
if len(sys.argv)>1: mode = sys.argv[1]
else: mode = 'both'
filename = None
filename = 'mat/line_geometry_45deg.npy'
e = EdgeGrid(N_lame=25, grid_type='line', mode=mode, verb=False, filename=filename, period=4*60.)
el.main(e)
In [7]:
%cd ..
!rm mat/line_geometry_45deg.npy
%run scenario_line_geometry_45deg.py writer
%cd posts
In [8]:
import matplotlib
%matplotlib inline
import matplotlib.pyplot as plt
z = np.load('../mat/line_geometry_45deg.npy')
el.check(e, z)
fig, ax = plt.subplots(figsize=(15, 3))
#_ = ax.plot(z[:, 0])
_ = ax.plot(z[:, 0], z[:, 1:])
90 deg¶
In [9]:
%%writefile ../scenario_line_geometry_90deg.py
#!/usr/bin/env python
# -*- coding: utf8 -*-
import elasticite as el
import numpy as np
class EdgeGrid(el.EdgeGrid):
def champ(self):
if self.structure: N_lame = self.N_lame-self.struct_N
else: N_lame = self.N_lame
force = np.zeros_like(self.lames[2, :N_lame])
damp_min = 0.7
damp_tau = 14.
damp = lambda t: damp_min + (1.-damp_min)*np.exp(-np.abs(np.mod(t+self.period/2, self.period)-self.period/2)/damp_tau)
smooth = lambda t: 1.-np.exp(-np.abs(np.mod(t+self.period/2, self.period)-self.period/2)**2/damp_tau**2)
on_off = lambda t, freq: (np.sin(2*np.pi*t/self.period*freq) > 0.)
noise = lambda t: .2 * smooth(t)
force -= 7.5 * (np.mod(self.lames[2, :N_lame], np.pi) -np.pi/2 ) *smooth(self.t) * on_off(self.t, 3)
force -= 40 * (np.mod(self.lames[2, :N_lame]+np.pi/2, np.pi) - np.pi/2) * (1- smooth(self.t) ) * (1-on_off(self.t, 3))
force += noise(self.t)*np.pi*np.random.randn(N_lame)
force -= damp(self.t) * self.lames[3, :N_lame]/self.dt
force *= .01
force = 2 * np.tanh(force)
return force
if __name__ == "__main__":
import sys
if len(sys.argv)>1: mode = sys.argv[1]
else: mode = 'both'
filename = None
filename = 'mat/line_geometry_90deg.npy'
e = EdgeGrid(N_lame=25, grid_type='line', mode=mode, verb=False, filename=filename, period=4*60.)
el.main(e)
In [10]:
%cd ..
!rm mat/line_geometry_90deg.npy
%run scenario_line_geometry_90deg.py writer
%cd posts
In [11]:
import matplotlib
%matplotlib inline
import matplotlib.pyplot as plt
z = np.load('../mat/line_geometry_90deg.npy')
el.check(e, z)
fig, ax = plt.subplots(figsize=(15, 3))
#_ = ax.plot(z[:, 0])
_ = ax.plot(z[:, 0], z[:, 1:])
angles structure¶
on s'oriente vers les angles parallèles aux structures
In [12]:
%%writefile ../scenario_line_geometry_structure.py
#!/usr/bin/env python
# -*- coding: utf8 -*-
import elasticite as el
import numpy as np
class EdgeGrid(el.EdgeGrid):
def champ(self):
if self.structure: N_lame = self.N_lame-self.struct_N
else: N_lame = self.N_lame
force = np.zeros_like(self.lames[2, :N_lame])
damp_min = 0.8
damp_tau = 15.
damp = lambda t: damp_min #+ (1.-damp_min)*np.exp(-np.abs(np.mod(t+self.period/2, self.period)-self.period/2)/damp_tau)
smooth = lambda t: 1.-np.exp(-np.abs(np.mod(t+self.period/2, self.period)-self.period/2)**2/damp_tau**2)
on_off = lambda t, freq: (np.sin(2*np.pi*t/self.period*freq) > 0.)
noise = lambda t: .4 * smooth(t)
np.random.seed(12345)
random_timing = np.random.rand(N_lame)
#print(np.mod(random_timing + self.t/self.period, 1))
struct_angles = np.random.permutation( np.hstack((self.struct_angles, -np.array(self.struct_angles)))) * np.pi / 180
#print(struct_angles, (np.mod(random_timing + self.t/self.period, 1)*len(struct_angles)).astype(np.int))
angle_desired = np.zeros(N_lame)
for i, idx in enumerate((np.mod(random_timing + self.t/self.period, 1)*len(struct_angles)).astype(np.int)):
angle_desired[i] = struct_angles[idx]
force -= 20 * (np.mod(self.lames[2, :N_lame] - angle_desired +np.pi/2, np.pi) - np.pi/2 ) * smooth(self.t)
force -= 80 * (np.mod(self.lames[2, :N_lame] + np.pi/2, np.pi) - np.pi/2) * (1- smooth(self.t) )
force += noise(self.t)*np.pi*np.random.randn(N_lame)
force -= damp(self.t) * self.lames[3, :N_lame]/self.dt
force = .02 * 100 * np.tanh(force/100)
return force
if __name__ == "__main__":
import sys
if len(sys.argv)>1: mode = sys.argv[1]
else: mode = 'both'
filename = None
filename = 'mat/line_geometry_structure.npy'
e = EdgeGrid(N_lame=25, grid_type='line', mode=mode, verb=False, filename=filename, period=4*60.)
el.main(e)
In [13]:
%cd ..
!rm mat/line_geometry_structure.npy
%run scenario_line_geometry_structure.py writer
%cd posts
In [14]:
import matplotlib
%matplotlib inline
import matplotlib.pyplot as plt
z = np.load('../mat/line_geometry_structure.npy')
el.check(e, z)
fig, ax = plt.subplots(figsize=(15, 3))
#_ = ax.plot(z[:, 0])
_ = ax.plot(z[:, 0], z[:, 1:])
git¶
In [15]:
!git add ../mat/line_geometry_90deg.npy ../scenario_line_geometry_90deg.py
!git s
In [16]:
!git commit -am' scenario geometry 90deg '
In [17]:
! git push