# -*- coding: utf-8 -*-
"""
Created on Thu Feb  6 00:47:21 2014

@author: dconduche
"""

import matplotlib.pyplot as plt
import random

def marche_aleatoire_2d(N): #N : nombre de pas
    x_liste=[0]
    y_liste=[0]
    for i in range(N):
        direction=random.randrange(4) #choix au hasard de la direction
                # direction=0 : -1 selon y
                # direction=1 : -1 selon x
                # direction=2 : +1 selon y
                # direction=3 : +1 selon x
        x_liste.append(x_liste[i]+(direction%2)*(direction-2))
        y_liste.append(y_liste[i]+((direction+1)%2)*(direction-1))
    return x_liste,y_liste

def affiche_2d(x,y): #exemple, faisable aussi avec plot + code couleur pour le temps
    plt.grid()
    plt.scatter(x, y,c= range(len(x)), marker = 'x', s=20)
    plt.axis('equal')
    plt.show()


def marche_aleatoire_3d(N): #N : nombre de pas
    x_liste=[0]
    y_liste=[0]
    z_liste=[0]    
    for i in range(N):
        direction=random.randrange(6) #choix au hasard de la direction
                # direction=0 : -1 selon x
                # direction=1 : -1 selon y
                # direction=2 : -1 selon z
                # direction=3 : +1 selon x
                # direction=4 : +1 selon y
                # direction=5 : +1 selon z
        if direction in [0,3]:
            x_liste.append(x_liste[i]+2*direction//3-1)
            y_liste.append(y_liste[i])
            z_liste.append(z_liste[i])
        if direction in [1,4]:
            x_liste.append(x_liste[i])
            y_liste.append(y_liste[i]+2*(direction-1)//3-1)
            z_liste.append(z_liste[i])
        if direction in [2,5]:
            x_liste.append(x_liste[i])
            y_liste.append(y_liste[i])
            z_liste.append(z_liste[i]+2*(direction-2)//3-1)
    return x_liste,y_liste,z_liste

def affiche_3d(x,y,z): #le import devrait être en début de programme.
    from mpl_toolkits.mplot3d import Axes3D
    fig = plt.figure()
    ax = plt.gca(projection='3d')
    #ax.set_aspect('equal')
    plt.plot  (x, y, z,'-')
    #plt.axis('equal')
    plt.show()

def marche_aleatoire_1d(N): #N : nombre de pas
    x_liste=[0]
    for i in range(N):
        x_liste.append(x_liste[i]+random.randrange(-1,2,2))
    return x_liste

def affiche_1d(x):
    plt.grid()
    ax = plt.gca()
    ax.spines['bottom'].set_position(('data',0))
    plt.plot(range(len(x)), x, c='black')
    plt.show()


    
N=10000 #Nombre de pas
#x,y=marche_aleatoire_2d(N)
#affiche_2d(x,y)

#x_liste,y_liste,z_liste=marche_aleatoire_3d(N)
#affiche_3d(x_liste,y_liste,z_liste)

affiche_1d(marche_aleatoire_1d(N))