<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[[ALGO] algorithme de collision en fromage]]></title><description><![CDATA[<p dir="auto">bonjour bonjour !</p>
<p dir="auto">pour  j'ai codé un petit algorithme qui me permet de tester si notre personnage fait face à une image ou non.</p>
<p dir="auto">le tout avec une marge dynamique <img src="http://new.melinyel.net/assets/plugins/nodebb-plugin-emoji/emoji/android/1f609.png?v=aa95655114f" class="not-responsive emoji emoji-android emoji--wink" style="height:23px;width:auto;vertical-align:middle" title=";)" alt="😉" /></p>
<p dir="auto">pour les non-initié à la SDL, la structure SDL_Rect contient les coordonnées : x, y, w et h d'une image.</p>
<p dir="auto">j'ai crois donc qu'il est important de vous le faire partager <img src="http://new.melinyel.net/assets/plugins/nodebb-plugin-emoji/emoji/android/1f604.png?v=aa95655114f" class="not-responsive emoji emoji-android emoji--smile" style="height:23px;width:auto;vertical-align:middle" title=":D" alt="😄" /></p>
<pre><code>bool colisionfromage(SDL_Rect lanceur, SDL_Rect recepteur, SDL_Rect curseur, double marge)
{
    double degre, degre2, diff;
    int difx, dify;

    difx = (lanceur.x + lanceur.w/2) - (curseur.x + curseur.w/2); //calcul de la difference en pixel
    dify = (lanceur.y + lanceur.h/2) - (curseur.y + curseur.h/2); //entre le lanceur et le pointeur de la souris
    degre = atan2(dify, difx);//obtention de l'angle en radian

    difx = (lanceur.x + lanceur.w/2) - (recepteur.x + recepteur.w/2); //calcul de la difference en pixel entre
    dify = (lanceur.y + lanceur.h/2) - (recepteur.y + recepteur.h/2); //le lanceur et l'objectif
    degre2 = atan2(dify, difx);//obtention de l'angle en radian

	degre  *= 57.296;//conversion en degre
	degre2 *= 57.296;

	degre   += 180; //ajustement pour passer d'un systeme (-180/180) à un systeme (0/360)
	degre2  += 180;

	diff = degre-degre2;//calcul de la différence

	if (diff &lt; 0) //si diff est négatif, on le passe en positif
    {
        diff *= -1;
    }

	if (diff &lt;= 0 || diff &gt;= marge/2) //si la différence est plus grande que la marge, nous retournons FAUX
    {
        return FALSE;
    }
    return TRUE;
}
</code></pre>
<p dir="auto">si vous avez des questions / remarques, comme d'habitude, je vous écoute !</p>
<p dir="auto">edit : je sais que ce code a un défaut, le calcul de la différence ne marche pas si l'un est &lt;360 et l'autre &gt;0. mais je ne sais pas comment gérer ça simplement. des idées ?</p>
]]></description><link>http://new.melinyel.net/topic/1031/algo-algorithme-de-collision-en-fromage</link><generator>RSS for Node</generator><lastBuildDate>Thu, 21 May 2026 19:30:53 GMT</lastBuildDate><atom:link href="http://new.melinyel.net/topic/1031.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 27 Aug 2014 00:48:24 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to [ALGO] algorithme de collision en fromage on Thu, 28 Aug 2014 17:28:11 GMT]]></title><description><![CDATA[<p dir="auto">C'est mieux cegdd <img src="http://new.melinyel.net/assets/plugins/nodebb-plugin-emoji/emoji/android/1f642.png?v=aa95655114f" class="not-responsive emoji emoji-android emoji--slightly_smiling_face" style="height:23px;width:auto;vertical-align:middle" title=":)" alt="🙂" /></p>
<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/azad" aria-label="Profile: Azad">@<bdi>Azad</bdi></a>: je ne vois pas de quoi tu parles x)</p>
<p dir="auto">Par contre, <a class="plugin-mentions-user plugin-mentions-a" href="/user/cegdd" aria-label="Profile: cegdd">@<bdi>cegdd</bdi></a>: le mot clé "register" est déconseillé depuis gcc 1.2 (on est déjà à la 4.0), car tu empeche le compilateur de pouvoir faire ses propres optimisations mémoire (en sachant qu'il est plus intelligent que nous pour ça <img src="http://new.melinyel.net/assets/plugins/nodebb-plugin-emoji/emoji/android/1f642.png?v=aa95655114f" class="not-responsive emoji emoji-android emoji--slightly_smiling_face" style="height:23px;width:auto;vertical-align:middle" title=":)" alt="🙂" /> )</p>
]]></description><link>http://new.melinyel.net/post/11037</link><guid isPermaLink="true">http://new.melinyel.net/post/11037</guid><dc:creator><![CDATA[AlexMog]]></dc:creator><pubDate>Thu, 28 Aug 2014 17:28:11 GMT</pubDate></item><item><title><![CDATA[Reply to [ALGO] algorithme de collision en fromage on Thu, 28 Aug 2014 17:22:13 GMT]]></title><description><![CDATA[<p dir="auto">Je n'ai pas trop suvi l'ensemble du code, mais ça me semble bizarre que tu aies deux instructions pour le IF qui se suivent, et qui peuvent toutes les deux êtres "enclenchées".<br />
Là, tu fais :</p>
<p dir="auto">IF diff &lt; 0</p>
<p dir="auto">IF diff &lt;= 0 ...</p>
<p dir="auto">Tu devrais peut-être tourner ça dans un else if à mon sens, et prendre le problème à l'envers. Je dis ça sur le coup, j'ai absolument pas réfléchis à la manière d'optimiser et ce n'est qu'une idée qui est peut-être fausse ! <img src="http://new.melinyel.net/assets/plugins/nodebb-plugin-emoji/emoji/android/1f642.png?v=aa95655114f" class="not-responsive emoji emoji-android emoji--slightly_smiling_face" style="height:23px;width:auto;vertical-align:middle" title=":)" alt="🙂" /><br />
AlexMog pourrait approuver ou désapprouver mon idée (s'il arrive à comprendre ce dont je parle), et expliquerait ça peut être mieux que moi.</p>
]]></description><link>http://new.melinyel.net/post/11035</link><guid isPermaLink="true">http://new.melinyel.net/post/11035</guid><dc:creator><![CDATA[Azad]]></dc:creator><pubDate>Thu, 28 Aug 2014 17:22:13 GMT</pubDate></item><item><title><![CDATA[Reply to [ALGO] algorithme de collision en fromage on Wed, 27 Aug 2014 23:18:03 GMT]]></title><description><![CDATA[<p dir="auto">j'ai refait le code:</p>
<pre><code>bool colisionfromage(SDL_Rect *lanceur, SDL_Rect *recepteur, SDL_Rect *curseur, double marge)
{
    register double diff;

	diff = (FindAngle(lanceur, recepteur)+180) - (FindAngle(lanceur, curseur)+180);

	if (diff &lt; 0) //si diff est négatif, on le passe en positif
    {
        diff *= -1;
    }

	if (diff &lt;= 0 || diff &gt;= marge/2) //si la différence est plus grande que la marge, nous retournons FAUX
    {
        return FALSE;
    }
    return TRUE;
}
double FindAngle(SDL_Rect *A, SDL_Rect *
{
    register int difx, dify;

    difx = (A-&gt;x + A-&gt;w/2) - (B-&gt;x + B-&gt;w/2);
    dify = (A-&gt;y + A-&gt;h/2) - (B-&gt;y + B-&gt;h/2);

    return atan2(dify, difx)* 57.296;
}
</code></pre>
<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/azad" aria-label="Profile: azad">@<bdi>azad</bdi></a> : je peux me débrouiller seul, mais de l'aide est toujours bienvenue <img src="http://new.melinyel.net/assets/plugins/nodebb-plugin-emoji/emoji/android/1f604.png?v=aa95655114f" class="not-responsive emoji emoji-android emoji--smile" style="height:23px;width:auto;vertical-align:middle" title=":D" alt="😄" /></p>
<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/alexmog" aria-label="Profile: AlexMog">@<bdi>AlexMog</bdi></a>: j'ai essayé de faire mieux, c'est ce que tu voulais ?</p>
<p dir="auto">d'autres idées ? <img src="http://new.melinyel.net/assets/plugins/nodebb-plugin-emoji/emoji/android/1f603.png?v=aa95655114f" class="not-responsive emoji emoji-android emoji--smiley" style="height:23px;width:auto;vertical-align:middle" title="=)" alt="😃" /></p>
]]></description><link>http://new.melinyel.net/post/11010</link><guid isPermaLink="true">http://new.melinyel.net/post/11010</guid><dc:creator><![CDATA[cegdd]]></dc:creator><pubDate>Wed, 27 Aug 2014 23:18:03 GMT</pubDate></item><item><title><![CDATA[Reply to [ALGO] algorithme de collision en fromage on Wed, 27 Aug 2014 21:04:24 GMT]]></title><description><![CDATA[<p dir="auto">Merci de ton partage, ça fait toujours plaisir à voir.<br />
Tu as besoin d'aide pour l'optimisation de ton code (je dis ça juste en référence au message d'AlexMog, je me permets pas de juger ton code <img src="http://new.melinyel.net/assets/plugins/nodebb-plugin-emoji/emoji/android/1f609.png?v=aa95655114f" class="not-responsive emoji emoji-android emoji--wink" style="height:23px;width:auto;vertical-align:middle" title=";)" alt="😉" /> ) ?</p>
]]></description><link>http://new.melinyel.net/post/10988</link><guid isPermaLink="true">http://new.melinyel.net/post/10988</guid><dc:creator><![CDATA[Azad]]></dc:creator><pubDate>Wed, 27 Aug 2014 21:04:24 GMT</pubDate></item><item><title><![CDATA[Reply to [ALGO] algorithme de collision en fromage on Wed, 27 Aug 2014 17:52:26 GMT]]></title><description><![CDATA[<p dir="auto">Ouille, les passages des arguments par copie font bien mal là <img src="http://new.melinyel.net/assets/plugins/nodebb-plugin-emoji/emoji/android/1f615.png?v=aa95655114f" class="not-responsive emoji emoji-android emoji--confused" style="height:23px;width:auto;vertical-align:middle" title=":/" alt="😕" /> (n'oublie pas que SDL_* sont des structures, et que tu les passes par copie... Tu ralentit ton programme, et il consomme des ressources qu'il pourrait ne pas consommer. Je te conseille mon cours sur les bonnes pratiques en C <img src="http://new.melinyel.net/assets/plugins/nodebb-plugin-emoji/emoji/android/1f609.png?v=aa95655114f" class="not-responsive emoji emoji-android emoji--wink" style="height:23px;width:auto;vertical-align:middle" title=";)" alt="😉" /> )</p>
<p dir="auto">Sinon, gg l'algo</p>
]]></description><link>http://new.melinyel.net/post/10958</link><guid isPermaLink="true">http://new.melinyel.net/post/10958</guid><dc:creator><![CDATA[AlexMog]]></dc:creator><pubDate>Wed, 27 Aug 2014 17:52:26 GMT</pubDate></item><item><title><![CDATA[Reply to [ALGO] algorithme de collision en fromage on Wed, 27 Aug 2014 09:36:00 GMT]]></title><description><![CDATA[<p dir="auto">cet algorithme, couplé avec celui-ci :</p>
<pre><code>int checkdistance(SDL_Rect A, SDL_Rect B, int lenght)
{

	double difx = A.x+(A.w/2) - B.x+(B.w/2);
	double dify = A.y+(A.h/2) - B.y+(B.h/2);

	if (difx &lt; 0) {difx = difx*-1;}
	if (dify &lt; 0) {dify = dify*-1;}

	double resultat = sqrt((difx*difx)+(dify*dify));

	if (resultat &lt;= lenght) {return -1;}
	else if (resultat &gt; lenght) {return 1;}
	return 0;
}
</code></pre>
<p dir="auto">qui sert a vérifier la distance entre les milieux de deux images.</p>
<p dir="auto">permet donc de faire des collision de ce style :</p>
<p dir="auto">![308789PrtScrcapture2.jpg](&lt;<em><strong>base_url</strong></em>&gt;/applications/sslimageproxy/interface/image.php?url=<a href="http://img4.hostingpics.net/pics/308789PrtScrcapture2.jpg" rel="nofollow ugc">http://img4.hostingpics.net/pics/308789PrtScrcapture2.jpg</a>)</p>
]]></description><link>http://new.melinyel.net/post/10952</link><guid isPermaLink="true">http://new.melinyel.net/post/10952</guid><dc:creator><![CDATA[cegdd]]></dc:creator><pubDate>Wed, 27 Aug 2014 09:36:00 GMT</pubDate></item><item><title><![CDATA[Reply to [ALGO] algorithme de collision en fromage on Wed, 27 Aug 2014 07:49:18 GMT]]></title><description><![CDATA[<p dir="auto">mmhhh.. fromage ^-^</p>
<p dir="auto">Très utile, merci du partage.</p>
<p dir="auto">+1Rep</p>
]]></description><link>http://new.melinyel.net/post/10950</link><guid isPermaLink="true">http://new.melinyel.net/post/10950</guid><dc:creator><![CDATA[mars073]]></dc:creator><pubDate>Wed, 27 Aug 2014 07:49:18 GMT</pubDate></item><item><title><![CDATA[Reply to [ALGO] algorithme de collision en fromage on Wed, 27 Aug 2014 01:26:42 GMT]]></title><description><![CDATA[<p dir="auto">décidement je n'ais pas été très long a l'améliorer en clareté ^^</p>
<p dir="auto">voici le nouveau code</p>
<pre><code>bool colisionfromage(SDL_Rect lanceur, SDL_Rect recepteur, SDL_Rect curseur, double marge)
{
    register double diff;

	diff = (FindAngle(lanceur, recepteur)+180) - (FindAngle(lanceur, curseur)+180);

	if (diff &lt; 0) //si diff est négatif, on le passe en positif
    {
        diff *= -1;
    }

	if (diff &lt;= 0 || diff &gt;= marge/2) //si la différence est plus grande que la marge, nous retournons FAUX
    {
        return FALSE;
    }
    return TRUE;
}
double FindAngle(SDL_Rect A, SDL_Rect 
{
    register int difx, dify;

    difx = (A.x + A.w/2) - (B.x + B.w/2);
    dify = (A.y + A.h/2) - (B.y + B.h/2);

    return atan2(dify, difx)* 57.296;
}
</code></pre>
]]></description><link>http://new.melinyel.net/post/10947</link><guid isPermaLink="true">http://new.melinyel.net/post/10947</guid><dc:creator><![CDATA[cegdd]]></dc:creator><pubDate>Wed, 27 Aug 2014 01:26:42 GMT</pubDate></item></channel></rss>