diff --git a/comptes-rendus/documentation-technique/Classes/Agent.md b/comptes-rendus/documentation-technique/Classes/Agent.md new file mode 100755 index 0000000000000000000000000000000000000000..84d8bb8999521948b4a55febf9d61e4841b98554 --- /dev/null +++ b/comptes-rendus/documentation-technique/Classes/Agent.md @@ -0,0 +1,92 @@ +# **| public class Agent : MonoBehaviour,** [**Visible**](./Vision/Visible.md) **|** [**↩️ Accueil**](../doc.md) **|** [**⬅️ SMA**](SMA.md) **|** [**➡️ Visible**](./Vision/Visible.md) **|** + +## **Descriptif** + +Classe correspondant à un Agent Boïd de la simulation. Il hérite de MonoBehaviour car il évoluera et intéragira avec l'environnement et les autres agents. Il implémente l'interface Visible car un agent est un objet visible. + +## **Attributs** + +--- + +* private [SMA](SMA.md) system : système auquel l'agent appartient +* private [Comportement](Comportement/Base/Comportement.md) comportement : comportement de l'agent +* private [Perception](Perception/Perception.md) perception : perception de l'agent +* public Vector3 deplacement : deplacement courant de l'agent +* private static int count : nombre d'Agents créés (pour identification des agents) +* private int id : identifiant de l'agent + +--- + +## **Méthodes** + +--- + +> public [SMA](SMA.md) getSystem() + +* return : le système auquel l'agent appartient + +--- + +> public bool isAlive() + +* return : s'il est un Visible mobile + +--- + +> public void setPerception([Perception](Perception/Perception.md) p) + +* param p : perception à donner à l'agent +* effect : utilise la perception p en tant que nouvelle perception de l'agent + +--- + +> public void setComportement([Comportement](Comportement/Base/Comportement.md) c) + +* param c : comportement à donner à l'agent +* effect : utilise le comportement c en tant que nouveau comportement de l'agent + +--- + +> void Start() + +* effect : dû à l'héritage de MonoBehaviour, est appelé avant la première image affichée de l'agent. Initialise l'agent. + +--- + +> void Update() + +* effect : dû à l'héritage de MonoBehaviour, est appelée à chaque affichage. Met à jour l'agent + +--- + +> private List<[Observation](Vision/Observation.md)> voir() + +* return : la liste des observations actuelles de l'agent + +--- + +> private void reagir(List<[Observation](Vision/Observation.md)> observation) + +* param observation : liste des observations effectuées +* effect : l'agent se déplace, réagis en conséquence + +--- + +> private void move() + +* effect : déplacement de l'agent + +--- + +> public override bool Equals(object obj) + +* param obj : objet à comparer s'il est égal à l'agent +* return : si l'objet est égal à l'agent + +--- + +> public override int GetHashCode() + +* return le hashCode de l'agent + +--- diff --git a/comptes-rendus/documentation-technique/Classes/Comportement/Base/Aleatoire.md b/comptes-rendus/documentation-technique/Classes/Comportement/Base/Aleatoire.md new file mode 100755 index 0000000000000000000000000000000000000000..a151cf8934f08bd47e684fdd735f9b9e137d9f83 --- /dev/null +++ b/comptes-rendus/documentation-technique/Classes/Comportement/Base/Aleatoire.md @@ -0,0 +1,23 @@ +# **| public class Aleatoire :** [**Comportement**](Comportement.md) **|** [**↩️ Accueil**](../../../doc.md) **|** [**⬅️ Constant**](Constant.md) **|** [**➡️ Bord**](../Bord/Bord.md) **|** + +## **Descriptif** + +Classe correspondant à un comportement aléatoire. Hérite de [Comportement](Comportement.md) + +## **Méthodes** + +--- + +> public Aleatoire([Agent](../../Agent.md) proprietaire) + +* param a : agent proprietaire du comportement +* return : instance de comportement + +--- + +> public override Vector3 reagir(List<[Observation](../../Vision/Observation.md)> observation); + +* param observation : liste d'observations effectuées par le propriétaire +* return : un vecteur déplacement + +--- diff --git a/comptes-rendus/documentation-technique/Classes/Comportement/Base/Comportement.md b/comptes-rendus/documentation-technique/Classes/Comportement/Base/Comportement.md new file mode 100755 index 0000000000000000000000000000000000000000..0f1e316777246e1485d00d4885b06e34e26bca0a --- /dev/null +++ b/comptes-rendus/documentation-technique/Classes/Comportement/Base/Comportement.md @@ -0,0 +1,31 @@ +# **| public abstract class Comportement |** [**↩️ Accueil**](../doc.md) **|** [**⬅️ CustomObstacle**](../../Environnement/Obstacle/CustomObstacle.md) **|** [**➡️ Constant**](./Constant.md) **|** + +## **Descriptif** + +Classe abstraite correspondant au comportement d'un agent + +## **Attributs** + +--- + +* protected [Agent](../../Agent.md) proprietaire : le proprietaire du comportement + +--- + +## **Méthodes** + +--- + +> public Comportement([Agent](../../Agent.md) a) + +* param a : agent proprietaire du comportement +* return : instance de comportement + +--- + +> public abstract Vector3 reagir(List<[Observation](../../Vision/Observation.md)> observation); + +* param observation : liste d'observations effectuées par le propriétaire +* return : un vecteur déplacement + +--- diff --git a/comptes-rendus/documentation-technique/Classes/Comportement/Base/Constant.md b/comptes-rendus/documentation-technique/Classes/Comportement/Base/Constant.md new file mode 100755 index 0000000000000000000000000000000000000000..e38dcf64db447d5851ad8033ce34e66146f00edd --- /dev/null +++ b/comptes-rendus/documentation-technique/Classes/Comportement/Base/Constant.md @@ -0,0 +1,23 @@ +# **| public class Constant :** [**Comportement**](Comportement.md) **|** [**↩️ Accueil**](../../../doc.md) **|** [**⬅️ Comportement**](Comportement.md) **|** [**➡️ Aleatoire**](./Aleatoire.md) **|** + +## **Descriptif** + +Classe correspondant à un comportement constant. Hérite de [Comportement](Comportement.md) + +## **Méthodes** + +--- + +> public Constant([Agent](../../Agent.md) proprietaire) + +* param a : agent proprietaire du comportement +* return : instance de comportement + +--- + +> public override Vector3 reagir(List<[Observation](../../Vision/Observation.md)> observation); + +* param observation : liste d'observations effectuées par le propriétaire +* return : un vecteur déplacement + +--- diff --git a/comptes-rendus/documentation-technique/Classes/Comportement/Bord/Bord.md b/comptes-rendus/documentation-technique/Classes/Comportement/Bord/Bord.md new file mode 100755 index 0000000000000000000000000000000000000000..e1a237b3e7c3e322615ce925f7a55df1badcdb33 --- /dev/null +++ b/comptes-rendus/documentation-technique/Classes/Comportement/Bord/Bord.md @@ -0,0 +1,48 @@ +# **| public class Bord :** [**Comportement**](../Base/Comportement.md) **|** [**↩️ Accueil**](../../../doc.md) **|** [**⬅️ Aleatoire**](../Base/Aleatoire.md) **|** [**➡️ TangenteBord1**](./TangenteBord1.md) **|** + + +## **Descriptif** + +Classe correspondant à un comportement de gestion de Bord. Hérite de [Comportement](../Base/Comportement.md) + + +## **Attributs** + +--- + +* static public float kR : constante de force de répulsion + +--- + + +## **Méthodes** + +--- + +> public Bord([Agent](../../Agent.md) proprietaire) + +* param a : agent proprietaire du comportement +* return : instance de comportement + +--- + +> public override Vector3 reagir(List<[Observation](../../Vision/Observation.md)> observation); + +* param observation : liste d'observations effectuées par le propriétaire +* return : un vecteur déplacement + +--- + +> protected virtual Vector3 answer([Observation](../../Vision/Observation.md) o) + +* param o : observation effectuée +* return : le vecteur réponse à l'observation + +--- + +> protected virtual float delta(Vector3 d) + +* param d : distance de l'observation +* return : force de la réponse + +--- \ No newline at end of file diff --git a/comptes-rendus/documentation-technique/Classes/Comportement/Bord/TangenteBord1.md b/comptes-rendus/documentation-technique/Classes/Comportement/Bord/TangenteBord1.md new file mode 100755 index 0000000000000000000000000000000000000000..aadff8409a39dca2ddddae0d073824b813df030d --- /dev/null +++ b/comptes-rendus/documentation-technique/Classes/Comportement/Bord/TangenteBord1.md @@ -0,0 +1,38 @@ +# **| public class TangenteBord1 :** [**Bord**](./Bord.md) **|** [**↩️ Accueil**](../../../doc.md) **|** [**⬅️ Bord**](./Bord.md) **|** [**➡️ TangenteBord2**](./TangenteBord2.md) **|** + + +## **Descriptif** + +Classe pour comportement de gestion de Bord en Tangente. Hérite de [Bord](Bord.md) + +## **Méthodes** + +--- + +> public TangenteBord1([Agent](../../Agent.md) proprietaire) + +* param a : agent proprietaire du comportement +* return : instance de comportement + +--- + +> public override Vector3 reagir(List<[Observation](../../Vision/Observation.md)> observation); + +* param observation : liste d'observations effectuées par le propriétaire +* return : un vecteur déplacement + +--- + +> protected virtual float deltaTan(Vector3 d) + +* param d : distance de l'observation +* return : force de la réponse en tangente + +--- + +> protected virtual Vector3 answerTan(Observation o) + +* param o : observation effectuée +* return : le vecteur réponse en tangente à l'observation + +--- \ No newline at end of file diff --git a/comptes-rendus/documentation-technique/Classes/Comportement/Bord/TangenteBord2.md b/comptes-rendus/documentation-technique/Classes/Comportement/Bord/TangenteBord2.md new file mode 100755 index 0000000000000000000000000000000000000000..b0c9ff5f6381f14501cc99629425e7755fbb35ce --- /dev/null +++ b/comptes-rendus/documentation-technique/Classes/Comportement/Bord/TangenteBord2.md @@ -0,0 +1,31 @@ +# **| public class TangenteBord2 :** [**Bord**](./Bord.md) **|** [**↩️ Accueil**](../../../doc.md) **|** [**⬅️ TangenteBord1**](./TangenteBord1.md) **|** [**➡️ CompositeSum**](../Composite/CompositeSum.md) **|** + +## **Descriptif** + +Classe pour comportement de gestion de Bord en Tangente 2eme version. Hérite de [TangenteBord1](TangenteBord1.md) + +## **Attributs** + +--- + +* public static float kT : constante de force tangente + +--- + +## **Méthodes** + +--- + +> public TangenteBord2([Agent](../../Agent.md) proprietaire) + +* param a : agent proprietaire du comportement +* return : instance de comportement + +--- + +> public override Vector3 reagir(List<[Observation](../../Vision/Observation.md)> observation); + +* param observation : liste d'observations effectuées par le propriétaire +* return : un vecteur déplacement + +--- \ No newline at end of file diff --git a/comptes-rendus/documentation-technique/Classes/Comportement/Composite/CompositeMean.md b/comptes-rendus/documentation-technique/Classes/Comportement/Composite/CompositeMean.md new file mode 100755 index 0000000000000000000000000000000000000000..20d9d2006f68f9044b886ed0188706b0011275cd --- /dev/null +++ b/comptes-rendus/documentation-technique/Classes/Comportement/Composite/CompositeMean.md @@ -0,0 +1,32 @@ +# **| public class CompositeMean :** [**CompositeSum**](./CompositeSum.md) **|** [**↩️ Accueil**](../../../doc.md) **|** [**⬅️ CompositeSum**](./CompositeSum.md) **|** [**➡️ Constrain2D**](../Contrainte/Constrain2D.md) **|** + +## **Descriptif** + +Classe pour comportement composé et qui moyenne ses composants. Hérite de [CompositeSum](./CompositeSum.md) + +## **Méthodes** + +--- + +> public CompositeMean([Agent](../../Agent.md) proprietaire,List<[Comportement](../Base/Comportement.md)> c,List< int > i) + +* param a : agent proprietaire du comportement +* param c : liste de comportement pour composer +* param i : liste des poids d'importances des comportements de la liste c +* return : instance de comportement + +--- + +> public CompositeMean([Agent](../../Agent.md) proprietaire) + +* param a : agent proprietaire du comportement +* return : instance de comportement + +--- + +> public override Vector3 reagir(List<[Observation](../../Vision/Observation.md)> observation); + +* param observation : liste d'observations effectuées par le propriétaire +* return : un vecteur déplacement + +--- diff --git a/comptes-rendus/documentation-technique/Classes/Comportement/Composite/CompositeSum.md b/comptes-rendus/documentation-technique/Classes/Comportement/Composite/CompositeSum.md new file mode 100755 index 0000000000000000000000000000000000000000..3602e410c0f27c910b29973042689241dc26c33e --- /dev/null +++ b/comptes-rendus/documentation-technique/Classes/Comportement/Composite/CompositeSum.md @@ -0,0 +1,56 @@ +# **| public class CompositeSum :** [**Comportement**](../Base/Comportement.md) **|** [**↩️ Accueil**](../../../doc.md) **|** [**⬅️ TangenteBord2**](../Bord/TangenteBord2.md) **|** [**➡️ CompositeMean**](./CompositeMean.md) **|** + +## **Descriptif** + +Classe pour comportement composé et qui somme ses composants. Hérite de [Comportement](../Base/Comportement.md) + +## **Attributs** + +--- + +* protected List<[Comportement](../Base/Comportement.md)> comportements : liste des comportements qui compose notre comportement +* protected List< int > importances : liste des poids d'importances des comportements + +--- + +## **Méthodes** + +--- + +> public CompositeSum([Agent](../../Agent.md) proprietaire,List<[Comportement](../Base/Comportement.md)> c,List< int > i) + +* param a : agent proprietaire du comportement +* param c : liste de comportement pour composer +* param i : liste des poids d'importances des comportements de la liste c +* return : instance de comportement + +--- + +> public CompositeSum([Agent](../../Agent.md) proprietaire) + +* param a : agent proprietaire du comportement +* return : instance de comportement + +--- + +> public void removeComportement(int i) + +* param i : indice du comportement à enlever +* effect : enlève le ième comportement du comportement composé + +--- + +> public void AddComportement([Comportement](../Base/Comportement.md) c, int i) + +* param c : comportement à ajouter +* param i : son poids d'importance +* effect : rajoute le comportement avec son poids dans le comportement composé + +--- + +> public override Vector3 reagir(List<[Observation](../../Vision/Observation.md)> observation); + +* param observation : liste d'observations effectuées par le propriétaire +* return : un vecteur déplacement + +--- diff --git a/comptes-rendus/documentation-technique/Classes/Comportement/Contrainte/Constrain2D.md b/comptes-rendus/documentation-technique/Classes/Comportement/Contrainte/Constrain2D.md new file mode 100755 index 0000000000000000000000000000000000000000..6145fe3fab64913746791f873831ac0a118aee53 --- /dev/null +++ b/comptes-rendus/documentation-technique/Classes/Comportement/Contrainte/Constrain2D.md @@ -0,0 +1,32 @@ +# **| public class Constrain2D :** [**Comportement**](../Base/Comportement.md) **|** [**↩️ Accueil**](../../../doc.md) **|** [**⬅️ CompositeMean**](../Composite/CompositeMean.md) **|** [**➡️ Reynolds**](../Papers/Reynolds.md) **|** + +## **Descriptif** + +Classe pour comportement contraignant un comportement à un mouvement 2D. Hérite de [Comportement](../Base/Comportement.md) + +## **Attributs** + +--- + +* protected Comportement comportement : le comportement qui est contraint + +--- + +## **Méthodes** + +--- + +> public Constrain2D(Agent proprietaire,Comportement c) + +* param a : agent proprietaire du comportement +* param c : comportement à contraindre +* return : instance de comportement + +--- + +> public override Vector3 reagir(List<[Observation](../../Vision/Observation.md)> observation); + +* param observation : liste d'observations effectuées par le propriétaire +* return : un vecteur déplacement + +--- \ No newline at end of file diff --git a/comptes-rendus/documentation-technique/Classes/Comportement/Papers/Paper.md b/comptes-rendus/documentation-technique/Classes/Comportement/Papers/Paper.md new file mode 100755 index 0000000000000000000000000000000000000000..d952e2397d4c340d0f9eb90314d3e6bbdaf18dad --- /dev/null +++ b/comptes-rendus/documentation-technique/Classes/Comportement/Papers/Paper.md @@ -0,0 +1,125 @@ +# **| public class Paper :** [**Comportement**](../Base/Comportement.md) **|** [**↩️ Accueil**](../../../doc.md) **|** [**⬅️ Reynolds**](./Reynolds.md) **|** + + +## **Descriptif** + +Classe pour comportement amorçant les règles énoncés dans cet [article](../../../../../media/paper.pdf). Hérite de [Comportement](../Base/Comportement.md) + +## **Attributs** + +--- + +* private static List< Vector3 > moves : liste des vecteurs déplacements possibles +* private static float activeSeuil : Critical real distance at which the FSRs are activated +* private static float changeRate : Change rate (0 < P_C < 1) for increasing and decreasing ideal distances, and stagnation and exile tolerance times +* private static float stagnationTolerance : Initial value of the stagnation tolerance time +* private static float exileTolerance : Initial value of the exile tolerance time +* private List<[Memory](#a)> memories : liste des mémoires courantes + + +--- + +## **Méthodes** + +--- + +> public Paper([Agent](../../Agent.md) proprietaire) + +* param a : agent proprietaire du comportement +* return : instance de comportement + +--- + +> public override Vector3 reagir(List<[Observation](../../Vision/Observation.md)> observation); + +* param observation : liste d'observations effectuées par le propriétaire +* return : un vecteur déplacement + +--- + +> private List< Vector3 > getTheMoves(List<[Observation](../../Vision/Observation.md)> observation) + +* param observation : observations effectuées par l'agent propriétaire +* return : liste de vecteur candidats pour réponse réaction + +--- + +> private Vector3 getTheMove(List< Vector3 > candidatesVectors) + +* param candidatesVectors : vecteurs qui pourraient être une réponse réaction (résultat de getTheMoves) +* return : le déplacement de mieux adapté + +--- + +> private void assumeTheMove(Vector3 themove,List<[Observation](../../Vision/Observation.md)> observation) + +* param themove : le déplacement choisi +* param observation : observations effectuées par l'agent propriétaire +* effect : change la mémoire du comportement en conséquence du choix effectué + +--- + +> private bool isAgent([Observation](../../Vision/Observation.md) o) + +* param o : observation effectué +* return : si l'objet observé est un agent ou non + +--- + +> private float computeDisatisfaction(Vector3 move, List<[Observation](../../Vision/Observation.md)> observation) + +* param move : déplacement testé +* param observation : observations effectuées par l'agent propriétaire +* return : la disatisfaction du déplacement + +--- + +> private void addAgentInMemory([Agent](../../Agent.md) concerned,float dist,float max, float reachDist) + +* param concerned : agent qu'on rajoute en mémoire +* param dist : la distance à laquelle il se situe +* param max : la distance maximale où ils pourraient se situer +* param reachDist : la distance prévu +* effect : ajoute l'agent en mémoire + +--- + +> private float idealDistance([Agent](../../Agent.md) other) + +* param other : l'agent avec qui on calcule la distance idéale +* return : la distance idéal entre le propriétaire et l'agent other + +--- + +<h2 id="a"><strong>Classe Interne : Memory</strong></h2> + +### Descriptifs + +Classe interne correspondant à une mémoire dyadic entre le propriétaire et un autre agent + +### Attributs + +--- + +* public [Agent](../../Agent.md) agent : agent en mémoire +* public float idealDistance : la distance idéale courante +* public float predictDistance : la distance prévue +* public float predictAttempt : l'intention de déplacement +* public float stagnation : la stagnation courante +* public float exilation : l'exilation courante + +--- + +### Méthodes + +--- + +> public Memory([Agent](../../Agent.md) a, float ideal, float predict, float attempt) + +* param a : agent en mémoire +* param ideal : distance idéale entre propriétaire et agent +* param predict : ditances prévu au prochain calcul de distances +* param attempt : attention de rapprochement (+-1) +* return : instance de memory + +--- diff --git a/comptes-rendus/documentation-technique/Classes/Comportement/Papers/Reynolds.md b/comptes-rendus/documentation-technique/Classes/Comportement/Papers/Reynolds.md new file mode 100755 index 0000000000000000000000000000000000000000..149eb4955a884c169d96f4e7d01c87a38d37dca8 --- /dev/null +++ b/comptes-rendus/documentation-technique/Classes/Comportement/Papers/Reynolds.md @@ -0,0 +1,79 @@ +# **| public class Reynolds :** [**Comportement**](../Base/Comportement.md) **|** [**↩️ Accueil**](../../../doc.md) **|** [**⬅️ Constrain2D**](../Contrainte/Constrain2D.md) **|** [**➡️ Paper**](./Paper.md) **|** + +## **Descriptif** + +Classe pour comportement respectant les règles de nuées de [Reynolds](../../../../../media/reynolds.pdf). Hérite de [Comportement](../Base/Comportement.md) + + +## **Attributs** + +--- + +* static public float Escape : constante de distance de séparation +* static public float EscapeWeight : poids de la séparation +* static public float Together : constante de distance de l'alignement +* static public float TogetherWeight : poids de l'alignement +* static public float Follow : constante de distance de cohésion +* static public float FollowWeight : poids de la cohésion + +--- + +## **Méthodes** + +--- + +> public Reynolds([Agent](../../Agent.md) proprietaire) + +* param a : agent proprietaire du comportement +* return : instance de comportement + +--- + +> public override Vector3 reagir(List<[Observation](../../Vision/Observation.md)> observation); + +* param observation : liste d'observations effectuées par le propriétaire +* return : un vecteur déplacement + +--- + +> private bool danger(Observation o) + +* param o : observation effectué +* return : si il faut appliquer la règle d'éloignement + +--- + +> private Vector3 fuir(Vector3 d) + +* param d : distance qu'il faut fuir +* return : vecteur d'éloignement + +--- + +> private bool normal(Observation o) + +* param o : observation effectué +* return : si il faut appliquer la règle d'alignement + +--- + +> private Vector3 suivre(Visible a) + +* param a : visible observé et qu'il faut suivre +* return : vecteur d'alignement + +--- + +> private bool isolement(Observation o) + +* param o : observation effectué +* return : si il faut appliquer la règle de cohésion + +--- + +> private Vector3 rapprocher(Vector3 d) + +* param d : distance dont il faut se rapprocher +* return : vecteur de cohésion + +--- diff --git a/comptes-rendus/documentation-technique/Classes/Environnement/Environnement.md b/comptes-rendus/documentation-technique/Classes/Environnement/Environnement.md new file mode 100755 index 0000000000000000000000000000000000000000..e1af7f6cae79e2298998f50997408c9be1f73127 --- /dev/null +++ b/comptes-rendus/documentation-technique/Classes/Environnement/Environnement.md @@ -0,0 +1,125 @@ +# **| public class Environnement : MonoBehaviour |** [**↩️ Accueil**](../../doc.md) **|** [**⬅️ Perception360**](../Perception/Perception360.md) **|** [**➡️ Topologie**](./Topologie/Topologie.md) **|** + +## **Descriptif** + +Classe correpondant à l'environnement du système. Hérite de Monobehaviour car il peut changer selon le système + +## **Attributs** + +--- + +* public GameObject cube : Visuel environnement en cube +* public GameObject carre : Visuel environnement en carré +* public GameObject[] figures : Visuels possibles pour les obstacles +* private [SMA](../SMA.md) system : système utilisant l'environnement +* private bool _3D : actuel dimension de l'environnement (vrai si 3D) +* private [Topologie](Topologie/Topologie.md) topologie : topologie de l'environnement +* private List<[CustomObstacle](Obstacle/CustomObstacle.md)> obstacles : liste des obstacles dans l'environnement + +--- + +## **Méthodes** + +--- + +> public [Topologie](Topologie/Topologie.md) getTopologie() + +* return : la topologie de l'environnement + +--- + +> public Vector3 validPosition() + +* return : une position valide dans l'environnement + +--- + +> public float getMaxDistance() + +return : la distance maximale mesurable dans l'environnement + +--- + +> public void notify() + +* effect : change l'environnement en 3D ou non selon le système + +--- + +> private void setTheTopologie([Topologie](Topologie/Topologie.md) topo) + +* param topo : topologie à utiliser pour l'environnement +* effect : Initialise l'environnement avec seulement son contour entré en paramètre + +--- + +> public List<[Observation](../Vision/Observation.md)> getVoisinage([Agent](../Agent.md) current, float rayon, float angle) + +* param current : agent dont on souhaite les observations +* param rayon : rayon de vision +* param angle : angle de vision +* return : liste des observations de l'agent dans l'environnement + +--- + +> private List<[Observation](../Vision/Observation.md)> detectAgents([Agent](../Agent.md) current, float rayon, float angle) + +* param current : agent dont on souhaite les observations +* param rayon : rayon de vision +* param angle : angle de vision +* return : liste des observations de l'agent d'autres dans l'environnement + +--- + +> private List<[Observation](../Vision/Observation.md)> detectObstacles([Agent](../Agent.md) current, List<[Observation](../Vision/Observation.md)> res,float rayon) + +* param current : agent dont on souhaite les observations +* param res : liste des observations déjà effectuées +* param rayon : rayon de vision +* return : liste des observations d'obstacles ajoutée à la liste des observations déjà effectuées de l'agent dans l'environnement + +--- + +> private List<[Observation](../Vision/Observation.md)> detectBord([Agent](../Agent.md) current, List<[Observation](../Vision/Observation.md)> res, float rayon, float angle) + +* param current : agent dont on souhaite les observations +* param res : liste des observations déjà effectuées +* param rayon : rayon de vision +* param angle : angle de vision +* return : liste des observations des bords ajoutée à la liste des observations déjà effectuées de l'agent dans l'environnement + +--- + +> public void createObject(GameObject obj, Vector3 pos) + +* param obj : objet à créer +* param pos : position où on souhaite le créer +* effect : crée l'objet à la position souhaitée + +--- + +> void Start() + +* effect : dû à l'héritage de MonoBehaviour, est appelé avant la première image affichée de l'environnement. Initialise l'environnement. + +--- + +> public List<[CustomObstacle](Obstacle/CustomObstacle.md)> getPattern(int i) + +* param i : indice du pattern à renvoyer +* return : un ième pattern d'obstacles + +--- + +> public void changeObstacles(List<[CustomObstacle](Obstacle/CustomObstacle.md)> co) + +* param co : liste d'obstacles à associer à l'environnement +* effect : change les obstacles de l'environnement + +--- + +> private void createObstacles() + +* effect : crée les visuels des obstacles + +--- diff --git a/comptes-rendus/documentation-technique/Classes/Environnement/Obstacle/CustomObstacle.md b/comptes-rendus/documentation-technique/Classes/Environnement/Obstacle/CustomObstacle.md new file mode 100755 index 0000000000000000000000000000000000000000..740409c3e56356ce5a89cd0c87b07e6aa3aff16f --- /dev/null +++ b/comptes-rendus/documentation-technique/Classes/Environnement/Obstacle/CustomObstacle.md @@ -0,0 +1,49 @@ +# **| public class CustomObstacle :** [**Obstacle**](./Obstacle.md) **|** [**↩️ Accueil**](../../../doc.md) **|** [**⬅️ PointObstacle**](./PointObstacle.md) **|** [**➡️ Comportement**](../../Comportement/Base/Comportement.md) **|** + + +## **Descriptif** + +Classe pour un obstacle avec un visuel défini. Hérite de [Obstacle](./Obstacle.md) + +## **Attributs** + +--- + +* public GameObject figure : l'esthetique de l'obstacle + +--- + +# **Méthodes** + +--- + +> public CustomObstacle([Environnement](../Environnement.md) e, Vector3 p,GameObject g) + +* param e : environnement auquel l'Obstacle appartient +* param p : position de l'obstacle +* param g : le visuel de l'obstacle +* return : instance d'obstacle avec un visuel particulier + +--- + +> public override Vector3 getPointContact([Agent](../../Agent.md) a); + +* param a : agent qui rentrerait en contact avec l'obstacle +* return : position du point auquel l'agent rentrerait en collision avec l'obstacle + +--- + +> public override List< Vector3 > getTangentes([Agent](../../Agent.md) a); + +* param a : agent qui rentrerait en contact avec l'obstacle +* return : les tangentes au point d'impact entre l'agent et l'obstacle + +--- + +> public override void createObject(); + +* effect : crée le visuel de l'obstacle dans l'environnement + +--- + +} diff --git a/comptes-rendus/documentation-technique/Classes/Environnement/Obstacle/Obstacle.md b/comptes-rendus/documentation-technique/Classes/Environnement/Obstacle/Obstacle.md new file mode 100755 index 0000000000000000000000000000000000000000..5265e1b85eeee82619abfe68828d2c13db436cc9 --- /dev/null +++ b/comptes-rendus/documentation-technique/Classes/Environnement/Obstacle/Obstacle.md @@ -0,0 +1,53 @@ +# **| public abstract class Obstacle :** [**Visible**](../../Vision/Visible.md) **|** [**↩️ Accueil**](../../../doc.md) **|** [**⬅️ Carre**](../Topologie/Carre.md) **|** [**➡️ PointObstacle**](./PointObstacle.md) **|** + + +## **Descriptif** + +Classe abstraite correspondant à un Obstacle dans un environnement. Implémente [Visible](../../Vision/Visible.md) + +# **Attributs** + +--- + +* public Vector3 position : position de l'objet +* protected [Environnement](../Environnement.md) env : environnement de l'objet + +--- + +## **Méthodes** + +--- + +> public Obstacle([Environnement](../Environnement.md) e, Vector3 p) + +* param e : environnement auquel l'Obstacle appartient +* param p : position de l'obstacle +* return : instance d'obstacle + +--- + +> public bool isAlive() + +* return : si l'objet visible est mobile ou non + +--- + +> public abstract Vector3 getPointContact([Agent](../../Agent.md) a); + +* param a : agent qui rentrerait en contact avec l'obstacle +* return : position du point auquel l'agent rentrerait en collision avec l'obstacle + +--- + +> public abstract List< Vector3 > getTangentes([Agent](../../Agent.md) a); + +* param a : agent qui rentrerait en contact avec l'obstacle +* return : les tangentes au point d'impact entre l'agent et l'obstacle + +--- + +> public abstract void createObject(); + +* effect : crée le visuel de l'obstacle dans l'environnement + +--- diff --git a/comptes-rendus/documentation-technique/Classes/Environnement/Obstacle/PointObstacle.md b/comptes-rendus/documentation-technique/Classes/Environnement/Obstacle/PointObstacle.md new file mode 100755 index 0000000000000000000000000000000000000000..2bdfb9fb787cf46c017b18d31b7861a36d03b661 --- /dev/null +++ b/comptes-rendus/documentation-technique/Classes/Environnement/Obstacle/PointObstacle.md @@ -0,0 +1,55 @@ +# **| public class PointObstacle :** [**Obstacle**](./Obstacle.md) **|** [**↩️ Accueil**](../../../doc.md) **|** [**⬅️ Obstacle**](./Obstacle.md) **|** [**➡️ CustomObstacle**](./CustomObstacle.md) **|** + + +## **Descriptif** + +Classe pour un obstacle en un point. Hérite de [Obstacle](./Obstacle.md) + +## **Attributs** + +--- + +* public List< Vector3 > tangentes : les tangentes au point + +--- + +# **Méthodes** + +--- + +> public PointObstacle([Environnement](../Environnement.md) e, Vector3 p, List<Vector3> t) + +* param e : environnement auquel l'Obstacle appartient +* param p : position de l'obstacle +* param t : tangentes au point +* return : instance de point d'obstacle + +--- + +> public PointObstacle([Environnement](../Environnement.md) e, Vector3 p) + +* param e : environnement auquel l'Obstacle appartient +* param p : position de l'obstacle +* return : instance de point d'obstacle + +--- + +> public override Vector3 getPointContact([Agent](../../Agent.md) a); + +* param a : agent qui rentrerait en contact avec l'obstacle +* return : position du point auquel l'agent rentrerait en collision avec l'obstacle + +--- + +> public override List< Vector3 > getTangentes([Agent](../../Agent.md) a); + +* param a : agent qui rentrerait en contact avec l'obstacle +* return : les tangentes au point d'impact entre l'agent et l'obstacle + +--- + +> public override void createObject(); + +* effect : crée le visuel de l'obstacle dans l'environnement + +--- diff --git a/comptes-rendus/documentation-technique/Classes/Environnement/Topologie/Carre.md b/comptes-rendus/documentation-technique/Classes/Environnement/Topologie/Carre.md new file mode 100755 index 0000000000000000000000000000000000000000..24b9b1724269c5b745db5e3eda0064ddfae6f2af --- /dev/null +++ b/comptes-rendus/documentation-technique/Classes/Environnement/Topologie/Carre.md @@ -0,0 +1,62 @@ +# **| public class Carre :** [**Cube**](Cube.md) **|** [**↩️ Accueil**](../../../doc.md) **|** [**⬅️ Cube**](./Cube.md) **|** [**➡️ Obstacle**](../Obstacle/Obstacle.md) **|** + + +## **Descriptif** + +Classe pour une topologie d'environnement en forme de carré. Hérite de [Cube](Cube.md) + +## **Méthodes** + +--- + +> public Carre(Environnement e,GameObject c) + +* param e : environnement auquel appartien la topologie +* param c : visuel de la topologie +* return : instance de la topologie + +--- + +> public override [Observation](../../Vision/Observation.md) detectEnv([Agent](../../Agent.md) current); + +* param current : agent qui détecte le bord de la topologie +* return : l'observation effectué par l'agent du point de la topologie que l'agent current pourrait heurter + +--- + +> protected List< Vector3 > getExtremPositions([Agent](../../Agent.md) current) + +* param current : l'agent dont on souhaite les projections de sa position sur les côtés du carré +* return : les projections de la position de l'agent sur les côtés du carré + +--- + +> protected Vector3 basicAnswer(List< Vector3 > p, float x, float y, float z) + +* param p : la liste des réponses basiques +* param x : composante en x du déplacement +* param y : composante en y du déplacement +* param z : composante en z du déplacement +* return : la position du point d'impact selon la direction unidirectionnel décrite par les composantes x, y et z + +--- + +> protected Vector3 goingToHit([Agent](../../Agent.md) current) + +* param current : l'agent dont on veut le point d'impact avec l'environnement +* return : la position du point d'impact entre l'environnement et l'agent current + +--- + + +> protected List<(Vector3,Vector3)> choiceMove(List< Vector3 > p, float x, float y,float z) + +* param p : la liste des positions des points des côtés (obtenus avec basicAnswer) +* param x : composante en x du déplacement +* param y : composante en y du déplacement +* param z : composante en z du déplacement +* return : les positions des points des côtés ainsi que les déplacements triviaux induit par le déplacement + +--- + + diff --git a/comptes-rendus/documentation-technique/Classes/Environnement/Topologie/Cube.md b/comptes-rendus/documentation-technique/Classes/Environnement/Topologie/Cube.md new file mode 100755 index 0000000000000000000000000000000000000000..4c0f90d41891f030e35e901185412910e33d4761 --- /dev/null +++ b/comptes-rendus/documentation-technique/Classes/Environnement/Topologie/Cube.md @@ -0,0 +1,91 @@ +# **| public class Cube :** [**Topologie**](Topologie.md) **|** [**↩️ Accueil**](../../../doc.md) **|** [**⬅️ Topologie**](./Topologie.md) **|** [**➡️ Carre**](./Carre.md) **|** + + +## **Descriptif** + +Classe pour une topologie d'environnement en forme de cube. Hérite de [Topologie](Topologie.md) + +## **Attributs** + +* protected float minX : borne inférieur en x +* protected float maxX : borne maximum en x +* protected float minY : borne inférieur en y +* protected float maxY : borne maximum en y +* protected float minZ : borne inférieur en z +* protected float maxZ : borne maximum en z +* protected GameObject cube : visuel du cube + +# **Méthodes** + +--- + +> public Cube([Environnement](../Environnement.md) e, GameObject c) + +* param e : environnement auquel appartien la topologie +* param c : visuel de la topologie +* return : instance de la topologie + +--- + +> public List< float > getExtremums() + +* return : la liste des limites du cube dans cet ordre [minX,maxX,minY,maxY,minZ,maxZ] + +--- + +> public override GameObject getGameObject() + +* return : le GameObject de la topologie + +--- + +> public override [Observation](../../Vision/Observation.md) detectEnv([Agent](../../Agent.md) current); + +* param current : agent qui détecte le bord de la topologie +* return : l'observation effectué par l'agent du point de la topologie que l'agent current pourrait heurter + + +--- + +> public override Vector3 validPosition(); + +* return : une position valide dans la topologie + +--- + +> public override bool isValidPosition(Vector3 pos); + +* param pos : une position +* return : si la position est valide dans la topologie + +--- + +> public override float getMaxDistance(); + +* return : la distance maximale mesurable dans la topologie + +--- + +> protected Vector3 convertToValidOne(Vector3 v) + +* param v : vecteur à convertir en un valide selon la topologie +* return : la position v de tel sorte à ce qu'elle soit valide dans le cube + +--- + +> protected bool onlyOneDirection(float x, float y, float z) + +* param x : composante en x du déplacement +* param y : composante en y du déplacement +* param z : composante en z du déplacement +* return : si le déplacement en x, y et z est unidirectionnel + +--- + +> protected Vector3 bestOne([Agent](../../Agent.md) current,Vector3 p1,Vector3 p2) + +* param p1 : 1ere position d'impact +* param p2 : 2eme position d'impact +* return : la position d'impact d'environnement entre p1 et p2 qui est la plus adapté pour l'agent current + +--- diff --git a/comptes-rendus/documentation-technique/Classes/Environnement/Topologie/Topologie.md b/comptes-rendus/documentation-technique/Classes/Environnement/Topologie/Topologie.md new file mode 100755 index 0000000000000000000000000000000000000000..e86f332936f747cf70a56fe1f33695d2cac4fd81 --- /dev/null +++ b/comptes-rendus/documentation-technique/Classes/Environnement/Topologie/Topologie.md @@ -0,0 +1,58 @@ +# **| public abstract class Topologie |** [**↩️ Accueil**](../../../doc.md) **|** [**⬅️ Environnement**](../Environnement.md) **|** [**➡️ Cube**](./Cube.md) **|** + +## **Descriptif** + +Classe abstraite pour la topologie d'un environnement + + +## **Attributs** + +--- + +* protected [Environnement](../Environnement.md) environnement : Environnement auquel appartient la topologie + +--- + +## **Méthodes** + + +--- + +> public Topologie([Environnement](../Environnement.md) env) + +* param env : environnement auquel appartien la topologie +* return : l'instance de Topologie + +--- + +> public abstract GameObject getGameObject(); + +* return : le GameObject de la topologie + +--- + +> public abstract [Observation](../../Vision/Observation.md) detectEnv([Agent](../../Agent.md) current); + +* param current : agent qui détecte le bord de la topologie +* return : l'observation effectué par l'agent du point de la topologie que l'agent current pourrait heurter + +--- + +> public abstract Vector3 validPosition(); + +* return : une position valide dans la topologie + +--- + +> public abstract bool isValidPosition(Vector3 pos); + +* param pos : une position +* return : si la position est valide dans la topologie + +--- + +> public abstract float getMaxDistance(); + +* return : la distance maximale mesurable dans la topologie + +--- diff --git a/comptes-rendus/documentation-technique/Classes/Perception/Perception.md b/comptes-rendus/documentation-technique/Classes/Perception/Perception.md new file mode 100755 index 0000000000000000000000000000000000000000..2862e344e07460cb2b43caa3c923a95b47c4f336 --- /dev/null +++ b/comptes-rendus/documentation-technique/Classes/Perception/Perception.md @@ -0,0 +1,35 @@ +# **| public class Perception |** [**↩️ Accueil**](../../doc.md) **|** [**⬅️ Observation**](../Vision/Observation.md) **|** [**➡️ Perception90**](./Perception90.md) **|** + + +## **Descriptif** + +Classe correspondant à la perception d'un agent de son environnement + +## **Attributs** + +--- + +* protected [Agent](../Agent.md) proprietaire : L'agent propriétaire de la perception +* protected float rayon : Le rayon de vision +* protected float angle : l'angle de vision + +--- + +## Méthodes + +--- + +> public Perception([Agent](../Agent.md) agent, float r, float a) + +* param agent : agent à qui la perception appartient +* param r : rayon de vision de la perception +* param a : angle de vision de la perception +* return : instance de la perception + +--- + +> public List<[Observation](../Vision/Observation.md)> voir() + +* return : la liste des observations que la perception a permis + +--- diff --git a/comptes-rendus/documentation-technique/Classes/Perception/Perception180.md b/comptes-rendus/documentation-technique/Classes/Perception/Perception180.md new file mode 100755 index 0000000000000000000000000000000000000000..6844fa1d0b0065faced4ca3e2268f48eda945d2f --- /dev/null +++ b/comptes-rendus/documentation-technique/Classes/Perception/Perception180.md @@ -0,0 +1,13 @@ +# **| public class Perception180 :** [**Perception**](./Perception.md) **|** [**↩️ Accueil**](../../doc.md) **|** [**⬅️ Perception90**](./Perception90.md) **|** [**➡️ Perception360**](./Perception360.md) **|** + +## **Descriptif** + +Classe héritant de [Perception](Perception.md) correspondant à une perception 180° + +## **Méthodes** + +> public Perception180([Agent](../Agent.md) agent, float r) + +* param agent : agent à qui la perception appartient +* param r : rayon de vision de la perception +* return : instance de la perception \ No newline at end of file diff --git a/comptes-rendus/documentation-technique/Classes/Perception/Perception360.md b/comptes-rendus/documentation-technique/Classes/Perception/Perception360.md new file mode 100755 index 0000000000000000000000000000000000000000..67fc11325f97e0854ba9390b09cf8953769f9469 --- /dev/null +++ b/comptes-rendus/documentation-technique/Classes/Perception/Perception360.md @@ -0,0 +1,13 @@ +# **| public class Perception360 :** [**Perception**](./Perception.md) **|** [**↩️ Accueil**](../../doc.md) **|** [**⬅️ Perception180**](./Perception180.md) **|** [**➡️ Environnement**](../Environnement/Environnement.md) **|** + +## **Descriptif** + +Classe héritant de [Perception](Perception.md) correspondant à une perception 360° + +## **Méthodes** + +> public Perception360([Agent](../Agent.md) agent, float r) + +* param agent : agent à qui la perception appartient +* param r : rayon de vision de la perception +* return : instance de la perception \ No newline at end of file diff --git a/comptes-rendus/documentation-technique/Classes/Perception/Perception90.md b/comptes-rendus/documentation-technique/Classes/Perception/Perception90.md new file mode 100755 index 0000000000000000000000000000000000000000..6894990eaeacd9dbd6d0944ca05eed332200f8d2 --- /dev/null +++ b/comptes-rendus/documentation-technique/Classes/Perception/Perception90.md @@ -0,0 +1,13 @@ +# **| public class Perception90 :** [**Perception**](./Perception.md) **|** [**↩️ Accueil**](../../doc.md) **|** [**⬅️ Perception**](./Perception.md) **|** [**➡️ Perception180**](./Perception180.md) **|** + +## **Descriptif** + +Classe héritant de [Perception](Perception.md) correspondant à une perception 90° + +## **Méthodes** + +> public Perception90([Agent](../Agent.md) agent, float r) + +* param agent : agent à qui la perception appartient +* param r : rayon de vision de la perception +* return : instance de la perception diff --git a/comptes-rendus/documentation-technique/Classes/SMA.md b/comptes-rendus/documentation-technique/Classes/SMA.md new file mode 100755 index 0000000000000000000000000000000000000000..44caed6f4839aa9e99e1ff03073178ab57853045 --- /dev/null +++ b/comptes-rendus/documentation-technique/Classes/SMA.md @@ -0,0 +1,161 @@ +# **| public class SMA : MonoBehaviour |** [**↩️ Accueil**](../doc.md) **|** [**⬅️ Utils**](Utils.md) **|** [**➡️ Agent**](./Agent.md) **|** + + +## **Descriptif** + +Classe correspondant au Système de Simulation. Il hérite de Monobehaviour car il a un comportement en fonction du temps (variation des paramètres et activités des agents). + +## **Attributs** + +--- + +* public GameObject boid : GameObject donnant la forme aux Agents +* private List< [Agent](Agent.md) > agents : Liste des agents du système +* private Environnement env : Environnement du système +* public int population : population courante (gestion population) +* private int oldPopulation : ancienne population (gestion population) +* private static int MINPOP : population minimum (gestion population) +* private static int MAXPOP : population maximum (gestion population) +* public bool _3D : vrai si en 3D, dimension courante +* private bool _old3D : vrai si en 3D, ancienne dimension +* public float angle : angle de vision courant des agents (gestion vision agents) +* private float oldAngle : ancien angle de vision des agents (gestion vision agents) +* public float rayon : rayon courant de vision des agents (gestion vision agents) +* private float oldRayon : ancien rayon de vision des agents (gestion vision agents) +* public float kR : Coefficient k pour répulsion des Bords (gestion Bords) +* public float kT : Coefficient t pour mouvement en tangente (gestion Bords) +* public float speedSimulation : vitesse de la simulation +* public bool AllReynolds : vrai si zone d'influence des règles Reynolds sont des disques et non des arc de disques (gestion Reynolds) +* public float Escape : constante de distance de séparation (gestion Reynolds) +* public float EscapeWeight : poids de la séparation (gestion Reynolds) +* public float Together : constante de distance de l'alignement (gestion Reynolds) +* public float TogetherWeight : poids de l'alignement (gestion Reynolds) +* public float Follow : constante de distance de cohésion (gestion Reynolds) +* public float FollowWeight : poids de la cohésion (gestion Reynolds) +* public int currentObstacles : pattern courant d'obstacles (gestion obstacles) +* private int oldObstacles : ancien pattern d'obstacles (gestion obstacles) + +--- + +## **Méthodes** + +--- + +> public Environnement getEnvironnement() + +* return : l'environnement du système + +--- + +> public List<[Observation](Vision/Observation.md)> getVoisinage([Agent](Agent.md) current, float rayon, float angle) + +* param current : agent qui perçoit son environnement +* param rayon : rayon de vision de l'agent +* param angle : angle de vision de l'agent +* return : la liste d'observations effectuées par l'agent current + +--- + +> public List<[Agent](Agent.md)> getAgents() + +* return : la liste des agents du système + +--- + +> void Start() + +* effect : dû à l'héritage de MonoBehaviour, est appelé avant la première image affichée de la simulation. Initialise le système + +--- + +> private void createEnvironnement() + +* effect : associe l'environnement au système + +--- + +> private void createAgents() + +* effect : crée autant d'agents que l'effectif voulu par le système + +--- + +> private void createAgents(int n) + +* param n : le nombre d'agents à créer +* effect : crée n agents dans le système + +--- + +> private void createAgent() + +* effect : crée un agent dans le système + +--- + +> private void createAgent(Vector3 pos) + +* param pos : position à laquelle on souhaite créer l'agent +* effect : crée un agent dans le système à la position pos + +--- + +> void Update() + +* effect : dû à l'héritage de MonoBehaviour, est appelée à chaque affichage. Met à jour le système + +--- + +> private void changeObstacles() + +* effect : changement du pattern obstacles selon attribut du système + +--- + +> private void changeDimension() + +* effect : Change la dimension de l'environnement du système pour correspondre au booléen _3D + +--- + +> private void resetAgents() + +* effect : supprime puis recrée les agents du système + +--- + +> private void removeAgents() + +* effect : supprime les agents du système + +--- + +> private void changeReynolds() + +* effect : met à jour les constantes Reynolds selon les constantes du sma + +--- + +> private void changePopulation() + +* effect : verifie les changement sur les agents selon les attributs du système + +--- + +> private void changeBordConstant() + +* effect : mise à jour selon les attributs du système des constantes kR (repulsion) et kT (tangente) du calcul de gestion de bords + +--- + +> private void changeEffectifPopulation() + +* effect : vérifie si l'effectif voulu par le système est respecté et modifie la population s'il le faut + +--- + +> private void changeAngleRayonVision() + +* effect : vérifie si l'angle et le rayon de vision des agents voulues par le système sont respectés et les modifie si besoin + +--- diff --git a/comptes-rendus/documentation-technique/Classes/Utils.md b/comptes-rendus/documentation-technique/Classes/Utils.md new file mode 100755 index 0000000000000000000000000000000000000000..c82b5d02e2bd9737fbe287d77b60b45faa34df39 --- /dev/null +++ b/comptes-rendus/documentation-technique/Classes/Utils.md @@ -0,0 +1,114 @@ +# **| public class Utils |** [**↩️ Accueil**](../doc.md) **|** [**➡️ SMA**](./SMA.md) **|** + +## **Descriptif** + +Cette classe sert à répertorier les méthodes utiles aux autres classes. Il s'agit d'une "boîte à outils". + +## **Méthodes** + +--- + +> public static Vector3 randomDirection() + +* return : un vecteur aleatoire normalisé + +--- + +> public static Vector3 normalizedVector(float x, float y, float z) + +* param x : mouvement en axe x +* param y : mouvement en axe y +* param z : mouvement en axe z +* return : un vecteur normalisé selon un mouvement en x, y et z + +--- + +> public static Vector3 meanVector(List< Vector3 > vectors) + +* param vectors : liste des vecteurs dont on souhaite faire la moyenne +* return : le vecteur moyennant la liste de vecteurs entrée en paramètre + +--- + +> public static Vector3 randomVector(float minX, float maxX, float minY, float maxY, float minZ, float maxZ) + +* param minX : valeur minimale en x +* param maxX : valeur maximale en x +* param minY : valeur minimale en y +* param maxY : valeur maximale en y +* param minZ : valeur minimale en z +* param maxZ : valeur maximale en z +* return : un vecteur aleatoire avec des composantes x, y et z comprises respectivements entre minX et maxX, minY et maxY et minZ et maxZ + +--- + +> public static float normVector(Vector3 v) + +* param v : le vecteur dont on veut retourner la norme +* return : la norme du vecteur v + +--- + +> public static float normVector(float minX, float maxX, float minY, float maxY, float minZ, float maxZ) + +* param minX : valeur de départ du vecteur en x +* param maxX : valeur d'arrivée du vecteur en x +* param minY : valeur de départ du vecteur en y +* param maxY : valeur d'arrivée du vecteur en y +* param minZ : valeur de départ du vecteur en z +* param maxZ : valeur d'arrivée du vecteur en z +* return : la norme du vecteur décrit par les paramètres + +--- + +> public static float abs(float n) + +* param n : flottant dont on souhaite la valeur absolue +* return : la valeur absolue de n + +--- + +> public static float pow(float n,int p) + +* param n : le flottant qu'on souhaite élevé à une puissance p +* param p : puissance à laquelle on veut élever n +* return : n à la puissance p + +--- + +> public static float random(float min, float max) + +* param min : valeur flottante minimale possible +* param max : valeur flottante maximale possible +* return : une valeur flottante entre min (inclus) et max (inclus) + +--- + +> public static int random(int min, int max) + +* param min : valeur entière minimale possible +* param max : valeur entière maximale possible +* return : une valeur entière entre min (inclus) et max (exclus) + +--- + +> public static float randomPosOrNeg(float n) + +* param n : le flottant qu'on souhaite aléatoirement rendre négatif ou positif +* return : le flottant n aléatoirement rendu négatif ou positif + +--- + +> public static int randomPosOrNeg(int n) + +* param n : l'entier qu'on souhaite aléatoirement rendre négatif ou positif +* return : l'entier n aléatoirement rendu négatif ou positif + +--- + +> public static float tan(float angle) + +* param angle : l'angle dont on souhaite la tangente +* return : la tangente de l'angle + +--- \ No newline at end of file diff --git a/comptes-rendus/documentation-technique/Classes/Vision/Observation.md b/comptes-rendus/documentation-technique/Classes/Vision/Observation.md new file mode 100755 index 0000000000000000000000000000000000000000..37497a66f6ee4d3074f005f9f2167619b2a057cf --- /dev/null +++ b/comptes-rendus/documentation-technique/Classes/Vision/Observation.md @@ -0,0 +1,26 @@ +# **| public class Observation |** [**↩️ Accueil**](../../doc.md) **|** [**⬅️ Visible**](./Visible.md) **|** [**➡️ Perception**](../Perception/Perception.md) **|** + +## **Descriptif** + +Classe correspondant à une observation effectué par un agent. Répertorie donc les informations relatives à une observation. + +## **Attributs** + +--- + +* public [Visible](Visible.md) objet : Objet Visible qui a été observé + +* public Vector3 distance : Le vecteur reliant l'observeur à l'observé + +--- + +## **Méthodes** + +--- +> public Observation([Visible](Visible.md) o, Vector3 d) + +* param o : Objet Visible observé +* param d : vecteur reliant l'observeur à l'observé +* return : instance d'Observation + +--- diff --git a/comptes-rendus/documentation-technique/Classes/Vision/Visible.md b/comptes-rendus/documentation-technique/Classes/Vision/Visible.md new file mode 100755 index 0000000000000000000000000000000000000000..2934dcab950adb0e52f662e122725ec2a3db9649 --- /dev/null +++ b/comptes-rendus/documentation-technique/Classes/Vision/Visible.md @@ -0,0 +1,15 @@ +# **| public interface Visible |** [**↩️ Accueil**](../../doc.md) **|** [**⬅️ Agent**](../Agent.md) **|** [**➡️ Observation**](./Observation.md) **|** + +## **Descriptif** + +Interface décrivant un objet visible + +## **Méthode** + +--- + +> public bool isAlive() + +* return : si l'objet visible est mobile ou non + +--- \ No newline at end of file diff --git a/comptes-rendus/documentation-technique/doc.md b/comptes-rendus/documentation-technique/doc.md index 37c26a2decaefa1e72f29a0600e783d5fe300515..c8f0591398d47e5de5cf1a23f3feffae239b1c31 100755 --- a/comptes-rendus/documentation-technique/doc.md +++ b/comptes-rendus/documentation-technique/doc.md @@ -1,9 +1,223 @@ -# Documentation Technique : Flocking Simulator +# **Documentation Technique : Flocking Simulator** [**↩️ Retour à l'accueil**](../../README.md) -## Sommaire +Bienvenue dans la documentation technique du projet Flocking Simulator ! Cette documentation technique vous servira à mieux comprendre pour mieux utiliser ce simulateur pour mettre en place des comportements de nuées d'oiseaux ! + +<h2 id="0"> <strong>Sommaire</strong> </h2> + +1. <a href="#1"> <strong> Comment utiliser le simulateur Flocking Simulator ? </strong> </a> +2. <a href="#2"> <strong> Fonctionnement des Agents </strong> </a> + 1. <a href="#21"> <strong> Perception </strong> </a> + 2. <a href="#22"> <strong> Comportement actuel </strong> </a> + 3. <a href="#23"> <strong> Ajout de comportement </strong> </a> +3. <a href="#3"> <strong> Comment ajouter des obstacles ? </strong> </a> +4. <a href="#4"> <strong> Diagramme UML du projet </strong> </a> +5. <a href="#5"> <strong> Classes </strong> </a> + + +<h2 id="1"> <strong> 1. Comment utiliser le simulateur Flocking Simulator ? </strong> <a href="#0">↩️</a> </h2> + +<br /> + +Pour utiliser ce simulateur, il vous faudra la version **2020.3.31f1** du logiciel **Unity**. +Il vous faudra l'utiliser sous l'onglet Scene. +La raison de l'utilisation de ce simulateur par l'onglet Scene d'Unity est qu'il vous sera ainsi possible d'intégrer de nouveaux comportements aux agents (expliqué en <a href="#2">2.</a>). + +Ainsi, il vous importer (Assets > Import Package > Custom Package...) le package vFinal.unitypackage qui se situe au dossier [src/Packages](../../src/Packages/vFinal.unitypackage) pour lancer en mode Play (bouton centré en haut de fenêtre) et avoir le simulateur comme ceci : + +<br /> +<div style="text-align:center;"><img src="../media/paramSMA.png" /></div> +<br /> + +<br /> + +Lorsque le simulateur est lancé, vous pouvez en effet jouer sur les paramètres en temps réel. En voici la liste et leur rôle : + +<br /> +<div style="text-align:center;"><img src="../media/ajustSMA.png" /></div> +<br /> + +* **Boid** : le prefab correspondant aux agents, ne pas le modifier à moins que vous utilisiez un nouveau prefab avec un composant avec le script [Agent.cs](../../src/Scripts/Agent.cs) +* **Population** : le nombre actuel d'agent Boid dans la simulation (le modifier pour avoir plus ou moins de Boids) +* **3D** : cocher cette case pour que la simulation se passe dans un environnement 3D +* **Angle** : angle courant de vision des agents (voir <a href="#21">2.1</a>) +* **Rayon** : rayon courant de vision des agents (voir <a href="#21">2.1</a>) +* **R** : constante de force de répulsion des obstacles (voir <a href="#22">2.2</a>) +* **T** : constante de force en tangente des obstacles (voir <a href="#22">2.2</a>) +* **Speed Simulation** : vitesse actuelle de la simulation +* **All Reynolds** : si coché, on considère les règles de Reynolds en disque et non en arc de disque (voir <a href="#22">2.2</a>) +* **Escape** : distance maximum à laquelle on applique la règle de séparation (voir <a href="#22">2.2</a>) +* **Escape Weight** : poids de la séparation (voir <a href="#22">2.2</a>) +* **Together** : distance maximum à laquelle on applique la règle d'alignement (voir <a href="#22">2.2</a>) +* **Together Weight** : poids de l'alignement (voir <a href="#22">2.2</a>) +* **Follow** : distance maximum à laquelle on applique la règle de cohésion (voir <a href="#22">2.2</a>) +* **Follow Weight** : poids de la cohésion (voir <a href="#22">2.2</a>) +* **Current Obstacles** : pattern courant des obstacles (soit 1, il y a des obstacles, sinon il n'y en a pas) (voir <a href="#3">3.</a>) + + + +<h2 id="2"> <strong> 2. Fonctionnement des Agents </strong> <a href="#0">↩️</a></h2> + +Un agent Boïd est défini par sa **perception** de son environnement et par son **comportement**, ses interactions avec l'environnement et avec les autres agents. Bien qu'on utilise les mêmes scripts pour chacun des agents, leurs positions et donc leurs perceptions seront différentes et ils agiront donc chacun différemment des autres. C'est par cette différence qu'il sera intéressant de visualiser les phénomènes émergeants qui se peuvent se créer à partir des interactions des agents, comme par exemple, un vol en nuée. + +<h3 id="21"> <strong> 2.1 Perception </strong> </h3> + +<br /> +<div style="text-align:center;"><img src="../media/perception.png" /></div> +<br /> + +La perception d'un agent est donc défini par l'agent propriétaire, un angle de vision et un rayon de vision (modifiable en temps réel lors de la simulation). Cette perception de l'environnement par l'agent permettra de renvoyer une liste d'observations qui sera traité par l'agent propriétaire afin qu'il agisse en conséquence. + +<h3 id="22"> <strong> 2.2 Comportement actuel </strong> </h3> + +Un comportement d'agent, quelqu'il soit, hérite de la classe abstraite Comportement. Il doit être instancié en fonction d'un agent auquel il appartient et il doit implémenter une méthode qui renvoie un vecteur de déplacement en fonction d'une liste d'observation. + +À l'utilisation sans modification du simulateur, les agents sont dôtés d'un comportement composite, composé de 3 comportements différents : Reynolds, TangenteBord2 et Aleatoire. + +Le comportement composite permet d'additionner les déplacements indiqués par les comportements qui le composent selon des poids indiqués et de normaliser le déplacement somme. Actuellement, Reynolds et TangenteBord2 ont un poid 10 fois plus élevé que Aleatoire. + +Aussi, lorsque l'environnement est contraint d'être en 2 dimensions, le comportement Constrain2D sera utilisé pour contraindre le comportement composite à renvoyer un déplacement en 2 dimensions. + +Pour mieux comprendre ce que cela signifie, voici le descriptif des comportements déjà présents dans le projet : + +* Constrain2D : se construit en fonction d'un comportement, renverra le déplacement du comportement mais contraint en 2 dimensions + +* CompositeSum : se construit en fonction d'une liste de comportements et une liste d'importances, additionne les réponses des comportements selon les poids d'importances et renvoie la somme + +* Reynolds : applique les règles de Reynolds (voir [détails article](../../media/reynolds.pdf) ou [détails en ligne](https://gamedevelopment.tutsplus.com/tutorials/3-simple-rules-of-flocking-behaviors-alignment-cohesion-and-separation--gamedev-3444)) selon les autres agents observés et selon les constantes modifiables depuis le système + +* TangenteBord2 : applique une réponse aux bords d'environnements, la réponse est une répulsion (R / distance² ) et un mouvement en tangente (T / distance) + +* Aleatoire : renvoie un mouvement aléatoire + +* Constant : renvoie le déplacement déjà effectué par le propriétaire + +* Bord : applique une réponse aux bords d'environnements, la réponse est une répulsion (R / distance² ) + +* TangenteBord1 : applique une réponse aux bords d'environnements, la réponse est une répulsion (R / distance² ) et un mouvement en tangente (R / distance) + +* CompositeMean : Hérite de CompositeSum et renvoie la moyenne au lieu de la somme + +* Paper : amorce du comportement du [papier scientifique](../../media/paper.pdf) + + +<h3 id="23"> <strong> 2.3 Ajout de comportement </strong> <a href="#0">↩️</a> </h3> + +Comme décrit précédemment, un comportement doit hériter de la classe abstraite [**Comportement**](./Classes/Base/Comportement.md) (public class NomClass : Comportement), doit être instancier au minima avec l'agent propriétaire de celui ci et doit implémenter la méthode suivante : + +> public Vector3 reagir(List< Observation > observation); + +Méthode qui prend en paramètre une liste d'[**Observation**](./Classes/Vision/Observation.md) et qui renvoie un vecteur de déplacement en réponse. + +Une fois une telle classe héritante de Comportement, vous pourrez l'intégrer à un Agent. + +Dans la fonction Start dans la classe Agent, vous trouverez ceci : + + // début Comportement modifiable + + *Code affectation comportement* + + // fin Comportement modifiable + +Dans cet espace, vous pourrez aisément affecter l'attribut **comportement** de l'agent avec votre nouveau comportement. Vous pouvez également utiliser votre nouveau comportement à travers un comportement CompositeSum comme dans cet exemple : + + // début Comportement modifiable + + List<Comportement> comps = new List<Comportement> { + new TangenteBord2(this),new Reynolds(this), new Aleatoire(this) + }; + List<int> imps = new List<int> { + 10,10,1 + }; + Comportement c = new CompositeSum(this,comps,imps); + + // fin Comportement modifiable + +Ici les comportements de TangenteBord2, Reynolds et Aleatoire sont utilisés avec des poids de 10, 10 et 1. + + +<h2 id="3"> <strong> 3. Comment ajouter des obstacles ? </strong> <a href="#0">↩️</a> </h2> + +Dans la simulation, l'environnement possède lui-également des attributs publics paramétrables + +<br /> +<div style="text-align:center;"><img src="../media/paramEnv.png" /></div> +<br /> + +En effet, il a plusieurs GameObject en paramètres : + +<br /> +<div style="text-align:center;"><img src="../media/ajustEnv.png" /></div> +<br /> + +* **Cube** : Correspond à la topologie 3D de l'environnement, vous pouvez le modifier, mais il est supposé cubique. S'il ne l'est pas, cela peut perturber la simulation +* **Carre** : Correspond à la topologie 2D de l'environnement, vous pouvez le modifier, mais il est supposé carre. S'il ne l'est pas, cela peut perturber la simulation +* **Figures** : Il s'agit d'une liste que vous pouvez remplir de GameObject (pas besoin de script attaché dessus) afin de donner des esthétiques aux obstacles + + +Ensuite, après avoir ajouté les obstacles voulus dans **Figures**, vous pourrez vous intéresser à la fonction **getPattern** de la classe [**Environnement**](./Classes/Environnement/Environnement.md) + + public List<CustomObstacle> getPattern(int i) { + if (i == 1) { + return new List<CustomObstacle> { + new CustomObstacle(this,new Vector3(-20.0f,20.0f,0.0f),figures[Utils.random(0,figures.Length)]), + new CustomObstacle(this,new Vector3(20.0f,-20.0f,0.0f),figures[Utils.random(0,figures.Length)]) }; + } + else return new List<CustomObstacle>(); + } + +Cette fonction consiste à retourner une liste de [**CustomObstacle**](./Classes/Environnement/Obstacle/CustomObstacle.md) que l'environnement utilisera. Un [**CustomObstacle**](./Classes/Environnement/Obstacle/CustomObstacle.md) se construit donc à partir de l'environnement auquel il appartient, la position de celui ci dans l'environnement et de son esthétique, du GameObject associé (qui peut être disposé dans **Figures**). + +<h2 id="4"> <strong> 4. Diagramme UML du projet </strong> <a href="#0">↩️</a> </h2> + +Voici le diagramme UML de la conception du Flocking Simulator : + +<br /> +<div style="text-align:center;"><img src="../media/UML.png" /></div> +<br /> + +<h2 id="5"> <strong> 5. Classes </strong> <a href="#0">↩️</a> </h2> + +Voici les pages de documentation des différentes classes du projet : + +* [**Utils**](./Classes/Utils.md) +* [**SMA**](./Classes/SMA.md) +* [**Agent**](./Classes/Agent.md) +* **./Environnement** + * [**Environnement**](./Classes/Environnement/Environnement.md) + * **./Obstacle** + * [**Obstacle**](./Classes/Environnement/Obstacle/Obstacle.md) + * [**PointObstacle**](./Classes/Environnement/Obstacle/PointObstacle.md) + * [**CustomObstacle**](./Classes/Environnement/Obstacle/CustomObstacle.md) + * **./Topologie** + * [**Topologie**](./Classes/Environnement/Topologie/Topologie.md) + * [**Cube**](./Classes/Environnement/Topologie/Cube.md) + * [**Carre**](./Classes/Environnement/Topologie/Carre.md) +* **./Perception** + * [**Perception**](./Classes/Perception/Perception.md) + * [**Perception90**](./Classes/Perception/Perception90.md) + * [**Perception180**](./Classes/Perception/Perception180.md) + * [**Perception360**](./Classes/Perception/Perception360.md) +* **./Vision** + * [**Observation**](./Classes/Vision/Observation.md) + * [**Visible**](./Classes/Vision/Visible.md) +* **./Comportement** + * **./Base** + * [**Aleatoire**](./Classes/Base/Aleatoire.md) + * [**Comportement**](./Classes/Base/Comportement.md) + * [**Constant**](./Classes/Base/Constant.md) + * **./Bord** + * [**Bord**](./Classes/Bord/Bord.md) + * [**TangenteBord1**](./Classes/Bord/TangenteBord1.md) + * [**TangenteBord2**](./Classes/Bord/TangenteBord2.md) + * **./Composite** + * [**CompositeSum**](./Classes/Composite/CompositeSum.md) + * [**CompositeMean**](./Classes/Composite/CompositeMean.md) + * **./Contrainte** + * [**Constrain2D**](./Classes/Contrainte/Constrain2D.md) + * **./Papers** + * [**Reynolds**](./Classes/Papers/Reynolds.md) + * [**Paper**](./Classes/Papers/Paper.md) -## Rajouter un Comportement -## Classes \ No newline at end of file diff --git a/comptes-rendus/journal-de-bord/media/rdv1.jpg b/comptes-rendus/journal-de-bord/media/rdv1.jpg deleted file mode 100755 index f9cca305ab04a426ad19c869da3e92f818280181..0000000000000000000000000000000000000000 Binary files a/comptes-rendus/journal-de-bord/media/rdv1.jpg and /dev/null differ diff --git a/comptes-rendus/journal-de-bord/media/rdv2-1.jpg b/comptes-rendus/journal-de-bord/media/rdv2-1.jpg deleted file mode 100755 index 69fa16f02c8ccf9cb935209a2f193873c1bebe1e..0000000000000000000000000000000000000000 Binary files a/comptes-rendus/journal-de-bord/media/rdv2-1.jpg and /dev/null differ diff --git a/comptes-rendus/journal-de-bord/media/rdv2-2.jpg b/comptes-rendus/journal-de-bord/media/rdv2-2.jpg deleted file mode 100755 index 94147bcf3ead5156fdef5c946e5a52ae2069ff39..0000000000000000000000000000000000000000 Binary files a/comptes-rendus/journal-de-bord/media/rdv2-2.jpg and /dev/null differ diff --git a/comptes-rendus/journal-de-bord/media/rdv2.jpg b/comptes-rendus/journal-de-bord/media/rdv2.jpg deleted file mode 100755 index aa0d010bcfbd97e9fa0627679d3e69feb3f8f587..0000000000000000000000000000000000000000 Binary files a/comptes-rendus/journal-de-bord/media/rdv2.jpg and /dev/null differ diff --git a/comptes-rendus/journal-de-bord/menu.md b/comptes-rendus/journal-de-bord/menu.md deleted file mode 100755 index 7c537da723a47d5a3d9dde3ef2d28e777f20ae95..0000000000000000000000000000000000000000 --- a/comptes-rendus/journal-de-bord/menu.md +++ /dev/null @@ -1,13 +0,0 @@ -# **📰 Journal de Bord** - -[**↩️ Retour à l'accueil**](../../README.md) - -Le PJI a eu lieu du 16/05/2022 au 14/06/2022. - -Vous pouvez ici accéder aux comptes rendus de chaque semaine. - -* [**Semaine 1**](./semaines/semaine1.md) : du 16/05/2022 au 20/05/2022 -* [**Semaine 2**](./semaines/semaine2.md) : du 23/05/2022 au 27/05/2022 -* [**Semaine 3**](./semaines/semaine3.md) : du 30/05/2022 au 03/06/2022 -* [**Semaine 4**](./semaines/semaine4.md) : du 06/06/2022 au 10/06/2022 -* [**Fin du Projet**](./semaines/final.md) : du 13/06/2022 au 14/06/2022 \ No newline at end of file diff --git a/comptes-rendus/journal-de-bord/semaines/final.md b/comptes-rendus/journal-de-bord/semaines/final.md deleted file mode 100755 index cb5bbc53752d4744a27661e6777ef43ebccd9040..0000000000000000000000000000000000000000 --- a/comptes-rendus/journal-de-bord/semaines/final.md +++ /dev/null @@ -1,37 +0,0 @@ -<h1 id="menu"><strong>📰 Journal de Bord - Semaine Fin</strong></h1> - -[↩️ **Retour au Journal de Bord**](../menu.md) - -La fin du Projet a eu lieu du 13/06/2022 au 14/06/2022. - -Vous pouvez ici accéder aux comptes rendus de chaque jour. - -* [**Lundi 13 Juin 2022**](#lundi) -* [**Mardi 14 Juin 2022**](#mardi) - - -<h2 id="lundi"> <strong> Journal de Bord - Jour 21 </strong><a href="#menu">↩️</a> </h2> - -Voici ici le descriptif du travail effectué lors de la journée du 13/06/2022. - -### De 8h30 à 10h - -### de 10h à 12h - -### de 14h à 16h - -### de 16h à 18h - - -<h2 id="mardi"> <strong> 🐦 Journal de Bord - Jour 22</strong> <a href="#menu">↩️</a> </h2> - -Voici ici le descriptif du travail effectué lors de la journée du 14/06/2022. - -### De 8h30 à 10h - -### de 10h à 12h - -### de 14h à 16h - -### de 16h à 18h - diff --git a/comptes-rendus/journal-de-bord/semaines/semaine1.md b/comptes-rendus/journal-de-bord/semaines/semaine1.md deleted file mode 100755 index a5839286bc66b835b3092ab1abe4cce0dbc4f53a..0000000000000000000000000000000000000000 --- a/comptes-rendus/journal-de-bord/semaines/semaine1.md +++ /dev/null @@ -1,121 +0,0 @@ -<h1 id="menu"><strong>📰 Journal de Bord - Semaine 1</strong></h1> - -[**↩️ Retour au Journal de Bord**](../menu.md) - -La Semaine 1 a eu lieu du 16/05/2022 au 20/05/2022 - -Vous pouvez ici accéder aux comptes rendus de chaque jour : - -* [**Lundi 16 Mai 2022**](#lundi) -* [**Mardi 17 Mai 2022**](#mardi) -* [**Mercredi 18 Mai 2022**](#mercredi) -* [**Jeudi 19 Mai 2022**](#jeudi) -* [**Vendredi 20 Mai 2022**](#vendredi) - - -<h2 id="lundi"> <strong>☕ Journal de Bord - Jour 1 </strong><a href="#menu">↩️</a> </h2> - -Voici ici le descriptif du travail effectué lors de la journée du 16/05/2022. - -### De 8h30 à 10h - -* Relecture de l'[article scientifique](../../../media/paper.pdf) qu'on voudra tester - -### de 10h à 12h - -* Écriture d'un [résumé](../../../media/resume.pdf) de l'[article scientifique](../../../media/paper.pdf) -* Organisation de la structure du dépôt Git du projet (création des .md) - -### de 14h à 16h - -* Lecture des particularités du langage c# pour faire de l'orienté objet -* Écriture du code - -### de 16h à 18h - -* Écriture du code (voir la [v0](../../../src/Packages/v0.unitypackage) de la scène) - - -<h2 id="mardi"> <strong> ✏️ Journal de Bord - Jour 2</strong> <a href="#menu">↩️</a> </h2> - -Voici ici le descriptif du travail effectué lors de la journée du 17/05/2022. - -### De 8h30 à 10h - -* Écriture du code, compréhension des particularités unity-c# - -### de 10h à 12h - -* Écriture du code, compréhension des particularités unity-c# -* Rendez-vous M.Routier - -### de 14h à 16h - -* Changement architecture code du projet - -### de 16h à 18h - -* fin changement architecture code projet (voir src pour voir les différents dossiers et fichiers .cs) - - -<h2 id="mercredi"> <strong> 🧠 Journal de Bord - Jour 3</strong> <a href="#menu">↩️</a> </h2> - -Voici ici le descriptif du travail effectué lors de la journée du 18/05/2022. - -### De 8h30 à 10h - -* Progression du code des Comportements et Perceptions - -### de 10h à 12h - -* Progression du code des Comportements et Perceptions -* Implémentation Comportement Composite - -### de 14h à 16h - -* Travail sur gestion des bords - -### de 16h à 18h - -* Gestion des bords OK, ajout de comportement adéquate - -<h2 id="jeudi"> <strong> ☀️ Journal de Bord - Jour 4</strong> <a href="#menu">↩️</a> </h2> - -Voici ici le descriptif du travail effectué lors de la journée du 19/05/2022. - -### De 8h30 à 10h - -* Lecture Article - -### de 10h à 12h - -* Refonte des comptes-rendus - -### de 14h à 16h - -* Réflexion sur concept : considération de la topologie comme un objet -* Ajout comportement restrictif 2D - -### de 16h à 18h - -* Possibilité de switcher entre environnement 2D et 3D - -<h2 id="vendredi"> <strong> 🐦 Journal de Bord - Jour 5</strong> <a href="#menu">↩️</a> </h2> - -Voici ici le descriptif du travail effectué lors de la journée du 20/05/2022. - -### De 8h30 à 10h - -### de 10h à 12h - -* Changement fonctionnement du comportement composite (insertion poids d'importance) -* Réflexion sur l'intersection de bords (2 stratégies possibles, à discuter) - -### de 14h à 16h - -* Lecture et compréhension partie implémentation des règles de nuées du papier scientifique - -### de 16h à 18h - -* Début implémentation comportement du papier -* Lecture de l'article scientifique donnée par l'encadrant. \ No newline at end of file diff --git a/comptes-rendus/journal-de-bord/semaines/semaine2.md b/comptes-rendus/journal-de-bord/semaines/semaine2.md deleted file mode 100755 index 021d8d7201cf59029af1632b68f624359abcc44d..0000000000000000000000000000000000000000 --- a/comptes-rendus/journal-de-bord/semaines/semaine2.md +++ /dev/null @@ -1,96 +0,0 @@ -<h1 id="menu"><strong>📰 Journal de Bord - Semaine 2</strong></h1> - -[**↩️ Retour au Journal de Bord**](../menu.md) - -La Semaine 2 a eu lieu du 23/05/2022 au 27/05/2022 - -Vous pouvez ici accéder aux comptes rendus de chaque jour. - -* [**Lundi 23 Mai 2022**](#lundi) -* [**Mardi 24 Mai 2022**](#mardi) -* [**Mercredi 25 Mai 2022**](#mercredi) -* [**Jeudi 26 Mai 2022**](#jeudi) -* [**Vendredi 27 Mai 2022**](#vendredi) - -<h2 id="lundi"> <strong>☕ Journal de Bord - Jour 6 </strong><a href="#menu">↩️</a> </h2> - -Voici ici le descriptif du travail effectué lors de la journée du 23/05/2022. - -### De 8h30 à 10h - -* Relecture article scientifique -* Continuation implémentation comportement de l'article - -### de 10h à 12h - -* Continuation implémentation comportement de l'article - -### de 14h à 16h - -* Continuer lecture article donné par l'encadrant -* Fin (pour l'instant) implémentation comportement de l'article (voir v3) - -### de 16h à 18h - -* fin lecture article donné par l'encadrant - - -<h2 id="mardi"> <strong> ✏️ Journal de Bord - Jour 7</strong> <a href="#menu">↩️</a> </h2> - -Voici ici le descriptif du travail effectué lors de la journée du 24/05/2022. - -### De 8h30 à 10h - -* Rendez vous avec l'encadrant - -### de 10h à 12h - -* Rendez vous avec l'encadrant -* Organisation du travail -* Correction du comportement de Reynolds - -### de 14h à 16h - -* Correction du comportement de Reynolds -* Changement de direction*speed à speed - -### de 16h à 18h - -* Gestion détection bord - - -<h2 id="mercredi"> <strong> 🧠 Journal de Bord - Jour 8</strong> <a href="#menu">↩️</a> </h2> - -Voici ici le descriptif du travail effectué lors de la journée du 25/05/2022. - -### De 8h30 à 10h - -### de 10h à 12h - -### de 14h à 16h - -### de 16h à 18h - -<h2 id="jeudi"> <strong> ☀️ Journal de Bord - Jour 9</strong> <a href="#menu">↩️</a> </h2> - -Voici ici le descriptif du travail effectué lors de la journée du 26/05/2022. - -### De 8h30 à 10h - -### de 10h à 12h - -### de 14h à 16h - -### de 16h à 18h - -<h2 id="vendredi"> <strong> 🐦 Journal de Bord - Jour 10</strong> <a href="#menu">↩️</a> </h2> - -Voici ici le descriptif du travail effectué lors de la journée du 27/05/2022. - -### De 8h30 à 10h - -### de 10h à 12h - -### de 14h à 16h - -### de 16h à 18h diff --git a/comptes-rendus/journal-de-bord/semaines/semaine3.md b/comptes-rendus/journal-de-bord/semaines/semaine3.md deleted file mode 100755 index 887b32c78a899d3d4af4750e8af52d0e87c99a10..0000000000000000000000000000000000000000 --- a/comptes-rendus/journal-de-bord/semaines/semaine3.md +++ /dev/null @@ -1,77 +0,0 @@ -<h1 id="menu"><strong>📰 Journal de Bord - Semaine 3</strong></h1> - -[**↩️ Retour au Journal de Bord**](../menu.md) - -La Semaine 3 a eu lieu du 30/05/2022 au 03/06/2022 - -Vous pouvez ici accéder aux comptes rendus de chaque jour. - -* [**Lundi 30 Mai 2022**](#lundi) -* [**Mardi 31 Mai 2022**](#mardi) -* [**Mercredi 01 Juin 2022**](#mercredi) -* [**Jeudi 02 Juin 2022**](#jeudi) -* [**Vendredi 03 Juin 2022**](#vendredi) - - -<h2 id="lundi"> <strong>☕ Journal de Bord - Jour 11 </strong><a href="#menu">↩️</a> </h2> - -Voici ici le descriptif du travail effectué lors de la journée du 30/05/2022. - -### De 8h30 à 10h - -### de 10h à 12h - -### de 14h à 16h - -### de 16h à 18h - - -<h2 id="mardi"> <strong> ✏️ Journal de Bord - Jour 12</strong> <a href="#menu">↩️</a> </h2> - -Voici ici le descriptif du travail effectué lors de la journée du 31/05/2022. - -### De 8h30 à 10h - -### de 10h à 12h - -### de 14h à 16h - -### de 16h à 18h - - -<h2 id="mercredi"> <strong> 🧠 Journal de Bord - Jour 13</strong> <a href="#menu">↩️</a> </h2> - -Voici ici le descriptif du travail effectué lors de la journée du 01/06/2022. - -### De 8h30 à 10h - -### de 10h à 12h - -### de 14h à 16h - -### de 16h à 18h - -<h2 id="jeudi"> <strong> ☀️ Journal de Bord - Jour 14</strong> <a href="#menu">↩️</a> </h2> - -Voici ici le descriptif du travail effectué lors de la journée du 02/06/2022. - -### De 8h30 à 10h - -### de 10h à 12h - -### de 14h à 16h - -### de 16h à 18h - -<h2 id="vendredi"> <strong> 🐦 Journal de Bord - Jour 15</strong> <a href="#menu">↩️</a> </h2> - -Voici ici le descriptif du travail effectué lors de la journée du 03/06/2022. - -### De 8h30 à 10h - -### de 10h à 12h - -### de 14h à 16h - -### de 16h à 18h - diff --git a/comptes-rendus/journal-de-bord/semaines/semaine4.md b/comptes-rendus/journal-de-bord/semaines/semaine4.md deleted file mode 100755 index 8d4b8d2e80702003327fa0195d9279439d64ccbe..0000000000000000000000000000000000000000 --- a/comptes-rendus/journal-de-bord/semaines/semaine4.md +++ /dev/null @@ -1,77 +0,0 @@ -<h1 id="menu"><strong>📰 Journal de Bord - Semaine 4</strong></h1> - -[**↩️ Retour au Journal de Bord**](../menu.md) - -La Semaine 4 a eu lieu du 06/06/2022 au 10/06/2022 - -Vous pouvez ici accéder aux comptes rendus de chaque jour. - -* [**Lundi 06 Juin 2022**](#lundi) -* [**Mardi 07 Juin 2022**](#mardi) -* [**Mercredi 08 Juin 2022**](#mercredi) -* [**Jeudi 09 Juin 2022**](#jeudi) -* [**Vendredi 10 Juin 2022**](#vendredi) - - -<h2 id="lundi"> <strong>☕ Journal de Bord - Jour 16 </strong><a href="#menu">↩️</a> </h2> - -Voici ici le descriptif du travail effectué lors de la journée du 06/06/2022. - -### De 8h30 à 10h - -### de 10h à 12h - -### de 14h à 16h - -### de 16h à 18h - - -<h2 id="mardi"> <strong> ✏️ Journal de Bord - Jour 17</strong> <a href="#menu">↩️</a> </h2> - -Voici ici le descriptif du travail effectué lors de la journée du 07/06/2022. - -### De 8h30 à 10h - -### de 10h à 12h - -### de 14h à 16h - -### de 16h à 18h - - -<h2 id="mercredi"> <strong> 🧠 Journal de Bord - Jour 18</strong> <a href="#menu">↩️</a> </h2> - -Voici ici le descriptif du travail effectué lors de la journée du 08/06/2022. - -### De 8h30 à 10h - -### de 10h à 12h - -### de 14h à 16h - -### de 16h à 18h - -<h2 id="jeudi"> <strong> ☀️ Journal de Bord - Jour 19</strong> <a href="#menu">↩️</a> </h2> - -Voici ici le descriptif du travail effectué lors de la journée du 09/06/2022. - -### De 8h30 à 10h - -### de 10h à 12h - -### de 14h à 16h - -### de 16h à 18h - -<h2 id="vendredi"> <strong> 🐦 Journal de Bord - Jour 20</strong> <a href="#menu">↩️</a> </h2> - -Voici ici le descriptif du travail effectué lors de la journée du 10/06/2022. - -### De 8h30 à 10h - -### de 10h à 12h - -### de 14h à 16h - -### de 16h à 18h - diff --git a/comptes-rendus/media/UML.drawio b/comptes-rendus/media/UML.drawio new file mode 100755 index 0000000000000000000000000000000000000000..fed4511ea0795ba519fbc7f394faf327ef32d9e3 --- /dev/null +++ b/comptes-rendus/media/UML.drawio @@ -0,0 +1,169 @@ +<mxfile host="65bd71144e"> + <diagram id="l-nZOZJwKbKLpFtzYW2H" name="Page-1"> + <mxGraphModel dx="1063" dy="478" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="413" pageHeight="583" background="#7A7A7A" math="0" shadow="0"> + <root> + <mxCell id="0"/> + <mxCell id="1" parent="0"/> + <mxCell id="2" value="SMA" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1"> + <mxGeometry x="162" y="30" width="90" height="40" as="geometry"/> + </mxCell> + <mxCell id="3" value="Environnement" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1"> + <mxGeometry x="62" y="130" width="100" height="40" as="geometry"/> + </mxCell> + <mxCell id="4" value="Agent" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1"> + <mxGeometry x="252" y="130" width="90" height="40" as="geometry"/> + </mxCell> + <mxCell id="5" value="1" style="endArrow=open;html=1;endSize=12;startArrow=diamondThin;startSize=14;startFill=1;edgeStyle=orthogonalEdgeStyle;align=left;verticalAlign=bottom;exitX=0;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="2" target="3"> + <mxGeometry x="-1" y="-12" relative="1" as="geometry"> + <mxPoint x="130" y="250" as="sourcePoint"/> + <mxPoint x="290" y="250" as="targetPoint"/> + <mxPoint as="offset"/> + </mxGeometry> + </mxCell> + <mxCell id="6" value="1" style="endArrow=open;html=1;endSize=12;startArrow=diamondThin;startSize=14;startFill=1;edgeStyle=orthogonalEdgeStyle;align=left;verticalAlign=bottom;exitX=1;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="2" target="4"> + <mxGeometry x="-1" y="3" relative="1" as="geometry"> + <mxPoint x="130" y="250" as="sourcePoint"/> + <mxPoint x="290" y="250" as="targetPoint"/> + </mxGeometry> + </mxCell> + <mxCell id="7" value="1" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" vertex="1" parent="1"> + <mxGeometry x="90" y="110" width="20" height="20" as="geometry"/> + </mxCell> + <mxCell id="8" value="*" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" vertex="1" parent="1"> + <mxGeometry x="310" y="110" width="20" height="20" as="geometry"/> + </mxCell> + <mxCell id="10" value="Topologie" style="whiteSpace=wrap;html=1;" vertex="1" parent="1"> + <mxGeometry y="240" width="90" height="40" as="geometry"/> + </mxCell> + <mxCell id="12" value="1" style="endArrow=open;html=1;endSize=12;startArrow=diamondThin;startSize=14;startFill=0;edgeStyle=orthogonalEdgeStyle;align=left;verticalAlign=bottom;exitX=0;exitY=1;exitDx=0;exitDy=0;entryX=0.25;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="3" target="10"> + <mxGeometry x="-0.8174" y="-17" relative="1" as="geometry"> + <mxPoint x="130" y="250" as="sourcePoint"/> + <mxPoint x="290" y="250" as="targetPoint"/> + <mxPoint as="offset"/> + </mxGeometry> + </mxCell> + <mxCell id="13" value="Obstacle" style="whiteSpace=wrap;html=1;" vertex="1" parent="1"> + <mxGeometry x="120" y="240" width="80" height="40" as="geometry"/> + </mxCell> + <mxCell id="14" value="1" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" vertex="1" parent="1"> + <mxGeometry x="30" y="220" width="20" height="20" as="geometry"/> + </mxCell> + <mxCell id="16" value="1" style="endArrow=open;html=1;endSize=12;startArrow=diamondThin;startSize=14;startFill=0;edgeStyle=orthogonalEdgeStyle;align=left;verticalAlign=bottom;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.25;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="3" target="13"> + <mxGeometry x="-0.5918" y="8" relative="1" as="geometry"> + <mxPoint x="130" y="250" as="sourcePoint"/> + <mxPoint x="290" y="250" as="targetPoint"/> + <mxPoint as="offset"/> + </mxGeometry> + </mxCell> + <mxCell id="17" value="*" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" vertex="1" parent="1"> + <mxGeometry x="142" y="220" width="20" height="20" as="geometry"/> + </mxCell> + <mxCell id="18" value="1" style="endArrow=open;html=1;endSize=12;startArrow=diamondThin;startSize=14;startFill=1;edgeStyle=orthogonalEdgeStyle;align=left;verticalAlign=bottom;exitX=0;exitY=1;exitDx=0;exitDy=0;entryX=0.25;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="4" target="19"> + <mxGeometry x="-0.7143" y="-12" relative="1" as="geometry"> + <mxPoint x="130" y="250" as="sourcePoint"/> + <mxPoint x="252" y="240" as="targetPoint"/> + <mxPoint as="offset"/> + </mxGeometry> + </mxCell> + <mxCell id="19" value="Perception" style="whiteSpace=wrap;html=1;" vertex="1" parent="1"> + <mxGeometry x="300" y="240" width="90" height="40" as="geometry"/> + </mxCell> + <mxCell id="20" value="" style="endArrow=classic;html=1;exitX=0.25;exitY=1;exitDx=0;exitDy=0;" edge="1" parent="1" source="10"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="180" y="270" as="sourcePoint"/> + <mxPoint x="23" y="320" as="targetPoint"/> + </mxGeometry> + </mxCell> + <mxCell id="21" value="Cube" style="whiteSpace=wrap;html=1;" vertex="1" parent="1"> + <mxGeometry y="320" width="60" height="30" as="geometry"/> + </mxCell> + <mxCell id="22" value="" style="endArrow=classic;html=1;exitX=0.4;exitY=1;exitDx=0;exitDy=0;entryX=0.4;entryY=0.033;entryDx=0;entryDy=0;entryPerimeter=0;exitPerimeter=0;" edge="1" parent="1" source="21" target="23"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="180" y="270" as="sourcePoint"/> + <mxPoint x="15" y="380" as="targetPoint"/> + </mxGeometry> + </mxCell> + <mxCell id="23" value="Carre" style="whiteSpace=wrap;html=1;" vertex="1" parent="1"> + <mxGeometry y="380" width="60" height="30" as="geometry"/> + </mxCell> + <mxCell id="24" value="Comportement" style="whiteSpace=wrap;html=1;" vertex="1" parent="1"> + <mxGeometry x="413" y="241" width="110" height="38" as="geometry"/> + </mxCell> + <mxCell id="25" value="1" style="endArrow=open;html=1;endSize=12;startArrow=diamondThin;startSize=14;startFill=1;edgeStyle=orthogonalEdgeStyle;align=left;verticalAlign=bottom;exitX=1;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="4" target="24"> + <mxGeometry x="-0.661" y="-12" relative="1" as="geometry"> + <mxPoint x="130" y="250" as="sourcePoint"/> + <mxPoint x="390" y="240" as="targetPoint"/> + <mxPoint as="offset"/> + </mxGeometry> + </mxCell> + <mxCell id="26" value="1" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" vertex="1" parent="1"> + <mxGeometry x="330" y="220" width="20" height="20" as="geometry"/> + </mxCell> + <mxCell id="27" value="1" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" vertex="1" parent="1"> + <mxGeometry x="440" y="220" width="20" height="20" as="geometry"/> + </mxCell> + <mxCell id="28" value="" style="endArrow=classic;html=1;exitX=0;exitY=1;exitDx=0;exitDy=0;" edge="1" parent="1" source="13"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="180" y="270" as="sourcePoint"/> + <mxPoint x="120" y="320" as="targetPoint"/> + </mxGeometry> + </mxCell> + <mxCell id="29" value="PointObstacle" style="whiteSpace=wrap;html=1;" vertex="1" parent="1"> + <mxGeometry x="80" y="320" width="80" height="30" as="geometry"/> + </mxCell> + <mxCell id="30" value="CustomObstacle" style="whiteSpace=wrap;html=1;" vertex="1" parent="1"> + <mxGeometry x="172" y="320" width="100" height="30" as="geometry"/> + </mxCell> + <mxCell id="32" value="Visible" style="whiteSpace=wrap;html=1;" vertex="1" parent="1"> + <mxGeometry x="305" y="330" width="80" height="30" as="geometry"/> + </mxCell> + <mxCell id="36" value="" style="endArrow=classic;html=1;exitX=1;exitY=1;exitDx=0;exitDy=0;" edge="1" parent="1" source="13"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="190" y="310" as="sourcePoint"/> + <mxPoint x="200" y="320" as="targetPoint"/> + </mxGeometry> + </mxCell> + <mxCell id="37" value="" style="endArrow=block;dashed=1;endFill=0;endSize=12;html=1;exitX=1;exitY=0.75;exitDx=0;exitDy=0;entryX=0;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="13" target="32"> + <mxGeometry width="160" relative="1" as="geometry"> + <mxPoint x="310" y="310" as="sourcePoint"/> + <mxPoint x="340" y="300" as="targetPoint"/> + <Array as="points"> + <mxPoint x="260" y="270"/> + <mxPoint x="260" y="310"/> + <mxPoint x="305" y="310"/> + </Array> + </mxGeometry> + </mxCell> + <mxCell id="38" value="" style="endArrow=block;dashed=1;endFill=0;endSize=12;html=1;exitX=0;exitY=0.5;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="4" target="32"> + <mxGeometry width="160" relative="1" as="geometry"> + <mxPoint x="310" y="310" as="sourcePoint"/> + <mxPoint x="470" y="310" as="targetPoint"/> + <Array as="points"> + <mxPoint x="210" y="150"/> + <mxPoint x="210" y="240"/> + <mxPoint x="280" y="240"/> + <mxPoint x="280" y="300"/> + <mxPoint x="345" y="300"/> + </Array> + </mxGeometry> + </mxCell> + <mxCell id="39" value="Observation" style="whiteSpace=wrap;html=1;" vertex="1" parent="1"> + <mxGeometry x="302.5" y="400" width="85" height="30" as="geometry"/> + </mxCell> + <mxCell id="41" value="1" style="endArrow=open;html=1;endSize=12;startArrow=diamondThin;startSize=14;startFill=0;edgeStyle=orthogonalEdgeStyle;align=left;verticalAlign=bottom;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;" edge="1" parent="1" source="39" target="32"> + <mxGeometry x="-1" y="15" relative="1" as="geometry"> + <mxPoint x="230" y="270" as="sourcePoint"/> + <mxPoint x="390" y="270" as="targetPoint"/> + <mxPoint as="offset"/> + </mxGeometry> + </mxCell> + <mxCell id="42" value="1" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" vertex="1" parent="1"> + <mxGeometry x="350" y="360" width="20" height="20" as="geometry"/> + </mxCell> + <mxCell id="46" value="Flocking Simulator" style="shape=umlFrame;whiteSpace=wrap;html=1;width=160;height=40;" vertex="1" parent="1"> + <mxGeometry x="-30" y="10" width="570" height="440" as="geometry"/> + </mxCell> + </root> + </mxGraphModel> + </diagram> +</mxfile> \ No newline at end of file diff --git a/comptes-rendus/media/UML.png b/comptes-rendus/media/UML.png new file mode 100755 index 0000000000000000000000000000000000000000..9c33042853ef4b4967af02912b0ac6b7fea3d4ca Binary files /dev/null and b/comptes-rendus/media/UML.png differ diff --git a/comptes-rendus/media/ajustEnv.png b/comptes-rendus/media/ajustEnv.png new file mode 100755 index 0000000000000000000000000000000000000000..f65be8c7dce924948440876f6977ca402593a31c Binary files /dev/null and b/comptes-rendus/media/ajustEnv.png differ diff --git a/comptes-rendus/media/ajustSMA.png b/comptes-rendus/media/ajustSMA.png new file mode 100755 index 0000000000000000000000000000000000000000..7afb9eea5721f138fe5f121690e7a73510025e3c Binary files /dev/null and b/comptes-rendus/media/ajustSMA.png differ diff --git a/comptes-rendus/media/paramEnv.PNG b/comptes-rendus/media/paramEnv.PNG new file mode 100755 index 0000000000000000000000000000000000000000..ed0df0c6aca1001382cd47cf8b00e28915245935 Binary files /dev/null and b/comptes-rendus/media/paramEnv.PNG differ diff --git a/comptes-rendus/media/paramSMA.PNG b/comptes-rendus/media/paramSMA.PNG new file mode 100755 index 0000000000000000000000000000000000000000..970b654690f1b963cb9ad6de739722407ed5096a Binary files /dev/null and b/comptes-rendus/media/paramSMA.PNG differ diff --git a/comptes-rendus/media/perception.png b/comptes-rendus/media/perception.png new file mode 100755 index 0000000000000000000000000000000000000000..39b218eb0cc0a426991f2fee2a64bf50ca023684 Binary files /dev/null and b/comptes-rendus/media/perception.png differ diff --git a/src/Scripts/Agent.cs b/src/Scripts/Agent.cs index 7f1814edf23a7694985ed899b923dd1e3243149a..8380fa624c4c31e1bc9cf630438ca31676128a65 100755 --- a/src/Scripts/Agent.cs +++ b/src/Scripts/Agent.cs @@ -50,6 +50,8 @@ public class Agent : MonoBehaviour, Visible { system = GameObject.Find("SMA").GetComponent<SMA>(); + // début Comportement modifiable + List<Comportement> comps = new List<Comportement> { new TangenteBord2(this),new Reynolds(this), new Aleatoire(this) }; @@ -58,6 +60,8 @@ public class Agent : MonoBehaviour, Visible }; Comportement c = new CompositeSum(this,comps,imps); + // fin Comportement modifiable + if(system._3D) comportement = c; else comportement = new Constrain2D(this,c);