Esempio n. 1
0
system = SurfaceGuidedMassSystem(
    surface=sphere,
    s0=np.array([np.pi/2, 1.0, np.pi/2, 0.0]),
    m=m,
    forces=[
        Gravity(m=m, g=g),
        SpringForce(stiffness=k, clip=clip),
        # ViscousFriction(mu=0.2),
    ]
)

# simulate
time = np.linspace(0, 20, 5000)

states = system.solve(time)

# build (todo opti)
mesh = sphere.build_surface(*sphere.mesh(50, 50))

physics = system.solutions(states, time)

trajectory = physics[:, Pi]
speed = physics[:, Vi]
abs_speed = physics[:, nVi]

Ec = 0.5 * m * abs_speed**2

Epk = np.zeros_like(Ec)
for i in range(len(trajectory)):
    Epk[i] = 0.5*k*np.linalg.norm(trajectory[i] - clip, 2)**2
Esempio n. 2
0
from gsurface import Plan, SurfaceGuidedMassSystem, build_s0
from gsurface.forces import CenterDirectedViscousFriction, ConstantDirectedViscousFriction
from gsurface.forces import SpringDampingForce
from gsurface.plotter import mayavi_plot_surfaces, SurfacePlot, Tyi

# simulate a 2D spring damping system, we notice that the radial speed tends to 0 where rotational speed still constant

plan = Plan(a=0.0, c=1.0)
surface = plan.build_surface(*plan.mesh(50, 50))

model = SurfaceGuidedMassSystem(surface=plan,
                                s0=build_s0(u0=0.5, du0=0.0, dv0=5),
                                m=1.0,
                                forces=[
                                    ConstantDirectedViscousFriction(
                                        1.0, np.array([1.0, 0.0, 0.0])),
                                    CenterDirectedViscousFriction(1.0),
                                    SpringDampingForce(100.0, 1.0, None, 1.0)
                                ])

time = np.linspace(0, 10, 3000)

data = model.solve(time)

solutions = model.solutions(data, time)

mayavi_plot_surfaces([SurfacePlot(surface, trajectory=solutions[Tyi])])

from gsurface.serialize import save_attached

model_parsed = save_attached(model, __file__)
Esempio n. 3
0
import numpy as np

from gsurface import SurfaceGuidedMassSystem, build_s0
from gsurface.forces import Gravity, SpringForce, ViscousFriction
from gsurface.plotter import mayavi_plot_surfaces, SurfacePlot, Tyi
from gsurface.surface import Cylinder

mass = 1.0  # kg

system = SurfaceGuidedMassSystem(
    surface=Cylinder(R=1.0).setlims(v_ll=-1, v_ul=1),
    solid=mass,
    forces=Gravity(mass, g=np.array([0.0, 0.0, -1.0])) +
    SpringForce(stiffness=1.0, clip=np.array([-0.5, 0.0, 0.0])) +
    ViscousFriction(0.1),
    s0=build_s0(0, 0.5, 0, 0),
)

time = np.linspace(0, 50.0, 1000)

data = system.solve(time)

solutions = system.solutions(data, time)

smesh = system.surface.build_surface(*system.surface.mesh(40, 40))

mayavi_plot_surfaces(
    [SurfacePlot(smesh, showSurface=True, trajectory=solutions[Tyi])])