Partage
  • Partager sur Facebook
  • Partager sur Twitter

Points qui bougent à l'intérieur d'un cercle

    24 avril 2016 à 10:32:27

    Bonjour !

    Je cherche désespérément à faire un code permettant d'animer des points avec un déplacement aléatoire à l'intérieur d'un cercle. Mon souci vient du fait que je ne sais pas comme faire en sorte que les points rebondissent sur les contours du cercle et ainsi restent dedans.

    J'ai essayé d'inverser leur vitesse quand leur distance au centre dépassait le rayon mais ça ne marche pas vraiment puisque certain points arrivent à s'échapper et d'autres se mette bizarrement à vibrer 

    Voilà le code :

    import numpy as np
    from matplotlib import pyplot as plt
    from matplotlib import animation
    
    # Initialisation nbre de points
    N = 10
    
    
    # Creation classe d'objet points
    class dot(object):
        def __init__(self): #initialisation position et vitesse
            self.x = np.random.random_sample() +5
            self.y = np.random.random_sample() +5
            self.velx = self.generate_new_vel()
            self.vely = self.generate_new_vel()
    
        def generate_new_vel(self): #generateur de vitesse aléatoire
            return (np.random.random_sample() - 0.5) / 8
    
        def move(self) :
                if ((self.x-5)**2 + (self.y-5)**2)>=(2)**2 : #c'est censé être le truc qui permet l'enfermement avec inversion des vitesses
                    self.velx=self.velx*(-1)
                    self.vely=self.vely*(-1)
            
                 #et ça c'est pour le déplacement aléatoire
                if np.random.random_sample() < 0.95:
                    self.x = self.x + self.velx
                    self.y = self.y + self.vely
                else:
                    self.velx = self.generate_new_vel()
                    self.vely = self.generate_new_vel()
                    self.x = self.x + self.velx
                    self.y = self.y + self.vely
                    
    
    
    # Initialisation points
    dots = [dot() for i in range(N)]
    
    # Initialisation figure et axes
    fig = plt.figure()
    ax = plt.axes(xlim=(0, 10), ylim=(0, 10))
    d, = ax.plot([dot.x for dot in dots],
                 [dot.y for dot in dots], 'ro', markersize=3)
    circle = plt.Circle((5, 5), 2, color='b', fill=False)
    ax.add_artist(circle)
    
    
    # animation des points
    def animate(i):
        for dot in dots:
            dot.move()
        d.set_data([dot.x for dot in dots],
                   [dot.y for dot in dots])
        return d,
    
    anim = animation.FuncAnimation(fig, animate, frames=200, interval=20)
    
    plt.show()

    Merci beaucoup pour votre aide !

    • Partager sur Facebook
    • Partager sur Twitter

    Points qui bougent à l'intérieur d'un cercle

    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
    • Editeur
    • Markdown