<HTML> 	<HEAD> 		<TITLE> Boids en Java </TITLE> 	</HEAD> <BODY>  <CENTER> 	<BR><font size=+4>Les Boids en JAVA</font><BR><BR> 	<TABLE BORDER=2> 	<TR><TD> 		Cette applet a t ralise dans le cadre de l'ouverture 12 Systmes Multi-Agents 		de le 3<SUP>me</SUP> anne  l'<A HREF="http://www.enst-bretagne.fr">ENST Bretagne</A>. 		<P> 		Elle a t crite par: 		<UL> 			<LI> Gildas Cadin pour la partie comportement des Boids. 			<LI> Lionel Deglise pour la partie interface. 			<LI> Pierre Thebaud pour la partie vitement d'obstacle (gestion des murs). 		</UL> 	</TD><TD> 		<APPLET code="BoidsApplet.class" codebase="applet_complette" width=700 height=350> 			Utilisez un navigateur compatible Java.<BR> 		</APPLET> <BR> 		<font color="red"> 		<CENTER>Appuyez sur le bouton "Recommencer" pour commencer l'Applet.</CENTER> 		</font> 	</TD> 	</TABLE> </CENTER>  <BR>  L'ensemble a &eacute;t&eacute; compil&eacute; avec un compilateur java version 1.1.5.<BR> Les sources sont disponibles sous licence <A HREF="http://www.gnu.org/copyleft/licenses.html">GPL</A> au format .tar.gz: <A HREF="boids.tar.gz">boids.tar.gz</A>.<BR> <A HREF="boids_simple">L'ancienne version</A> avec une interface plus simple est aussi disponible.   <BR> <BR> <hr> <BR> <center> 	<font size=+4>Fonctionnement des Boids en JAVA...</font> 	<br> 	<font size=+3>... ou comment jouer &agrave; Frankenstein !</font> </center>  <BR> <hr> <BR>  Les Boids sont des agents autonomes qui cohabitent dans un monde &agrave; 2 dimensions. Leur vie est r&eacute;gul&eacute;e par un certain nombre de comportements minimaux.<p>  <hr><BR> <font size=+4>1-</font> <u><font size=+2>Comportement des Boids :</font></u><br>  Dans sa version simplifi&eacute;e, un Boid n'est soumis qu'&agrave; 3 lois qui g&eacute;n&egrave;rent des forces s'appliquant sur lui et le font &eacute;voluer dans un monde peupl&eacute; d'autres Boids. Ces r&egrave;gles sont:  <ul> 	<li> <b>La s&eacute;paration</b>: 2 Boids ne peuvent pas se trouver au m&ecirc;me endroit au 	m&ecirc;me moment. 	<li> <b>La coh&eacute;sion</b>: Pour fomer un groupe, les Boids se rapprochent les uns des autres. 	<li> <b>L'allignement</b>: Pour rester grouper, les Boids essaient de suivrent un m&ecirc;me chemin. </ul>  A ces 3 r&egrave;gles minimales, nous avons rajout&eacute; une r&egrave;gle de <b>r&eacute;pulsion</b>.  <ul> 	<li> De mani&egrave;re standard, un Boid rouge n'interagit pas avec les verts sauf pour s'en 	&eacute;loigner. 	<li> Mais si dans un voisinage, il y a au moins 2 fois plus de verts que de rouges, les verts 	attaquent les rouges. </ul>  <hr><BR> <font size=+4>2-</font> <u><font size=+2>Gestion des Forces :</font></u><br>  Chacune des 4 lois permet de g&eacute;n&eacute;rer une force qui va s'appliquer sur le Boid pour le faire &eacute;voluer dans le plan.Le Boid poss&eacute;de un angle de vision, mais, pour chaque force, une distance d'application est d&eacute;finie. Gr&acirc;ce au couple (angle, distance) on trouve un certain nombre de Boids qui vont influencer le Boid en cours de traitement. <p>  Une fois les Boids qui vont interagir trouv&eacute;s, une politique diff&eacute;rente &agrave; chaque fois est appliqu&eacute;e pour permettre de donner un caract&egrave;re &agrave; chaque force.  <ol> 	<li> Pour permettre la <b>S&eacute;paration</b>, une force est calcul&eacute;e de mani&egrave;re 	&agrave; repousser le Boid de l'ensemble des proches. 	<li> La <b>Coh&eacute;sion</b> est assur&eacute;e par une force inverse &agrave; la 	pr&eacute;c&eacute;dente, qui a pour but de rapprocher le Boid du centre de gravit&eacute; 	du groupe des proches. 	<li> La force d'<b>allignement</b> est calcul&eacute;e comme &eacute;tant une moyenne entre 	les vitesses des voisins. 	<li> La force de <b>r&eacute;pulsion</b> est en fait une seconde force de s&eacute;paration 	par rapport &agrave; certains Boids (les autres). </ol>  <center><table> <tr ALIGN=CENTER> 	<td><img SRC="dist-angle.gif" ALT="Image du couple (angle, distance)" ></td> 	<td><img SRC="separation.gif" ALT="Image Sparation" ></td> 	<td><img SRC="cohesion.gif" ALT="Image de Cohesion" ></td> 	<td><img SRC="allignement.gif" ALT="Image d'Allignement" ></td> </tr>  <tr ALIGN=CENTER> 	<td>Couple (angle, distance)</td> 	<td>Force de S&eacute;paration</td> 	<td>Force de Coh&eacute;sion</td> 	<td>Force d'Alignement</td> </tr> </table></center>  <hr><BR> <font size=+4>3-</font> <u><font size=+2>Mise en commun des forces :</font></u><br>  Pour mettre toutes ces forces en commun, il a fallu utiliser un mod&egrave;le physique pour repr&eacute;senter le Boid. Un Boid est ainsi comos&eacute; de:  <ul> 	<li>Une masse 	<li>Une position 	<li>Une vitesse 	<li>Une acc&eacute;l&eacute;ration </ul>  L'ensemble est soumis &agrave; la loi de la conservation de la quantit&eacute; de mouvement: <center><img SRC="qdm.gif" ALT="Quantite de Mouvement" ></center>  <p>  On place l'ensemble dans un monde au temps non plus continu mais discret et on obtient: <center><img SRC="vitesse.gif" ALT="Vitesse" ></center>  <p>  Ce qui permet enfin de calculer la nouvelle position: <center><img SRC="position.gif" ALT="Vitesse" ></center>  <p>  Pour permettre au mod&egrave;le de coller un peu plus &agrave; la r&eacute;alit&eacute;, 2 modifications on &eacute;t&eacute; ajout&eacute;es &agrave; cette th&eacute;orie:  <ul> 	<li> La somme des forces est tronqu&eacute;e si elle d&eacute;passe une certaine force maximale. 	<li> La vitesse est elle aussi limit&eacute;e. </ul>  <HR> <BR>  Cette version permet de voir la cohabitation de 3 esp&egrave;ces en opposition. Une r&egrave;gle supl&eacute;mentaire a &eacute;t&eacute; ajout&eacute;e aux 3 classiques (coh&eacute;sion, s&eacute;paration, alignement).  <UL> 	<LI>Si on est vraiment en sup&eacute;riorit&eacute; num&eacute;rique (plus de 2 contre 1), 	on fonce sur les autres... 	<LI>Sinon on les &eacute;vite. </UL>  <BR> <HR> <BR>  Bibliographie: <UL> 	<LI><A HREF="http://www.red.com/cwr/boids.html">http://www.red.com/cwr/boids.html</A>: 	Boids Background and Update, by Craig Reynolds. 	<LI><A HREF="http://www.red.com/cwr/steer/gdc99/index.html">http://www.red.com/cwr/steer/gdc99/index.html</A> 	Steering Behaviors For Autonomous Characters, Craig W. Reynolds </UL>  Liste de sites sur les Boids: <UL> 	<LI><A HREF="http://www.cse.unsw.edu.au/~conradp/boids/">http://www.cse.unsw.edu.au/~conradp/boids/</A>: Boids 	by Conrad Parker. 	<LI><A HREF="http://www.geocities.com/SiliconValley/Bay/5922/">http://www.geocities.com/SiliconValley/Bay/5922/</A> 	Mafta's Boids. 	<LI><A HREF="http://www.earthnet.net/~leserman/boids/Boid.html">http://www.earthnet.net/~leserman/boids/Boid.html</A> 	Boids Jonathan Robbins's 8th grade Science Project. 	<LI><A HREF="http://www.media.mit.edu/~ckline/cornellwww/boid/boids.html">http://www.media.mit.edu/~ckline/cornellwww/boid/boids.html</A> 	C++ Boids By Christopher Kline. </UL> <BR>   </BODY> </HTML> <!-- --> </noscript> <SCRIPT LANGUAGE="JavaScript" TYPE="text/javascript"> <!-- var rnd = Math.floor(Math.random() * 9) + 1 ;  if (rnd <= 1) {  window.open('http://pub.chez.com/cgi-bin/perl/popup.pl/popup/adsl','pubadsl','location=no,toolbar=no,status=no,directories=no,scrollbars=no,width=468,height=560'); } else if(rnd <= 2) { window.open('http://pub.chez.com/cgi-bin/perl/popup.pl/popup/under','pubunder','location=no,toolbar=no,status=no,directories=no,scrollbars=no,width=451,height=300'); } else if(rnd >= 5) { window.open('http://pub.chez.com/cgi-bin/perl/popup.pl/popup/autre','pub250','location=no,toolbar=no,status=no,directories=no,scrollbars=no,width=250,height=250'); } else { window.open('http://pub.chez.com/cgi-bin/perl/popup.pl/popup/default','pub468','location=no,toolbar=no,status=no,directories=no,scrollbars=no,width=470,height=120'); } // --> </SCRIPT>  <script language="JavaScript" type="text/javascript"> WEBO_ZONE=122; WEBO_PAGE=1; weboplus_ok=0; </script> <script language="JavaScript" type="text/javascript" src="http://js.libertysurf.fr/chez/weborama/weboscopeplus.js"></SCRIPT> <script language="JavaScript" type="text/javascript">if(weboplus_ok==1){weboplus_zp(WEBO_ZONE,WEBO_PAGE);} </script> 
