Nainwak's World Index du Forum Nainwak's World
Combattez des nains de jardins !
 
 FAQFAQ   RechercherRechercher   Liste des MembresListe des Membres   Groupes d'utilisateursGroupes d'utilisateurs   S'enregistrerS'enregistrer 
 ProfilProfil   Se connecter pour vérifier ses messages privésSe connecter pour vérifier ses messages privés   ConnexionConnexion 

Problème de calcul des distances : une SOLUTION....

 
Ce forum est verrouillé; vous ne pouvez pas poster, ni répondre, ni éditer les sujets.   Ce sujet est verrouillé; vous ne pouvez pas éditer les messages ou faire de réponses.    Nainwak's World Index du Forum -> Centre d'étude des phénomènes paranormaux
Voir le sujet précédent :: Voir le sujet suivant  
Auteur Message
dJu77
Nain(e) au biberon


Inscrit le: 26 Mai 2004
Messages: 4

MessagePosté le: Jeu 03 Juin, 2004 11:39    Sujet du message: Problème de calcul des distances : une SOLUTION.... Répondre en citant

'lut à tous,

Dites, un pote m'a dit que vous cherchiez peut-être une solution au problème de calcul de distance (les diagonales qui affichent une distance de 3 au lieu de 2 par exemple).
J'y ai réfléchi et j'ai pondu un alogrithme...

La clé du truc, c'est la fonction récursive (fonction qui s'appelle elle-même).

Je ne sais pas si c'est ce que vous cherchez, je ne sais pas si c'est viable question performance, mais c'est une solution qui donne un résultat correct, en quelques lignes de code...
=> Au cas où ca vous intéresse...

voici le résultat
*****************
calculateDistance(int iXCurrent, int iYCurrent, int iXDestination, int iYDestination)
o.calculateDistance(11,4,10,3)=1
o.calculateDistance(11,4,9,2)=2
o.calculateDistance(11,4,8,1)=3
o.calculateDistance(11,4,12,5)=1
o.calculateDistance(11,4,13,6)=2
o.calculateDistance(11,4,11,5)=1
o.calculateDistance(11,4,10,4)=1
o.calculateDistance(11,4,9,5)=2


Et voici le code source (language Java)
***************************************

package testmain;

public class MyMain
{
public static void main(String[] args)
{
MyMain o = new MyMain();
System.err.println("o.calculateDistance(11,4,10,3)="+o.calculateDistance(11,4,10,3));
System.err.println("o.calculateDistance(11,4,9,2)="+o.calculateDistance(11,4,9,2));
System.err.println("o.calculateDistance(11,4,8,1)="+o.calculateDistance(11,4,8,1));
System.err.println("o.calculateDistance(11,4,12,5)="+o.calculateDistance(11,4,12,5));
System.err.println("o.calculateDistance(11,4,13,6)="+o.calculateDistance(11,4,13,6));
System.err.println("o.calculateDistance(11,4,11,5)="+o.calculateDistance(11,4,11,5));
System.err.println("o.calculateDistance(11,4,10,4)="+o.calculateDistance(11,4,10,4));
System.err.println("o.calculateDistance(11,4,9,5)="+o.calculateDistance(11,4,9,5));
}
public int calculateDistance(int iXCurrent, int iYCurrent, int iXDestination, int iYDestination)
{
int iXDiff = iXCurrent - iXDestination;
int iYDiff = iYCurrent - iYDestination;
int iXNbToAdd, iYNbToAdd;
if(iXDiff == 0 && iYDiff == 0)
{
return 0;
}
if(iXDiff == 0)
{
iXNbToAdd = 0;
}
else if(Math.abs(iXDiff) == iXDiff)
{
iXNbToAdd = -1;
}
else
{
iXNbToAdd = 1;
}
if(iYDiff == 0)
{
iYNbToAdd = 0;
}
else if(Math.abs(iYDiff) == iYDiff)
{
iYNbToAdd = -1;
}
else
{
iYNbToAdd = 1;
}
return 1 + calculateDistance(iXCurrent + iXNbToAdd, iYCurrent + iYNbToAdd, iXDestination, iYDestination);
}
}

Ca m'étonne que personne y ait pensé avant.
Ca m'a pris 20 minutes pour y penser, 20 minutes pour le faire et 20 minutes pour le tester...
=> Je suppose que, si ce problème traine, c'est que :
a. la solution existe mais pose des problèmes de perf...
b. personne n'a encore eu le temps ou l'envie de chercher...

Dans le cas a, mon post n'y changera pas grand chose, désolé.
Dans le cas b, ceci peut toujours servir Wink

A+,
dJu.
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé
[GND]Arwall
Généralement désarmant


Inscrit le: 22 Mai 2002
Messages: 6702

MessagePosté le: Jeu 03 Juin, 2004 11:59    Sujet du message: Répondre en citant

Non c'est qu'a part les joueurs pointilleux ca gene absolument rien dans le jeu ...

Laughing
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé
Haiken
L'idole des naines, le Zorro des pubs


Inscrit le: 06 Mai 2002
Messages: 2495

MessagePosté le: Jeu 03 Juin, 2004 12:09    Sujet du message: Répondre en citant

ta fonction c'est max (abs(iXCurrent-iXDestination), abs(iYCurrent-iYDestination)) en fait ?

il n'y a pas de problème de calcul de distances.

c'est juste qu'il y a deux distances :

- la distance de déplacement
- la distance de vision (= portée des armes)

c'est comme sur la carte michelin ,il y a la distance à vol d'oiseau et en passant par la route Laughing
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé Envoyer un e-mail Visiter le site web de l'utilisateur
Skipp
modère plus blanc que blanc...


Inscrit le: 24 Mai 2002
Messages: 4592
Localisation: [~]-World

MessagePosté le: Jeu 03 Juin, 2004 12:10    Sujet du message: Répondre en citant

Haiken a écrit:
c'est comme sur la carte michelin ,il y a la distance à vol d'oiseau et en passant par la route Laughing


Et la distance quand tu te paumes parce que c'est mal indiqué Wink
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web de l'utilisateur
Taozou
Nain-stallé(e)


Inscrit le: 09 Jan 2004
Messages: 283

MessagePosté le: Jeu 03 Juin, 2004 12:25    Sujet du message: Répondre en citant

Ok... mais quand il n'y a que 2 en diagonale, on devrait pouvoir tirer au Desert Eagle (par exemple), le pb est que dans la détect le nain est à 3... Donc pas d'option attaquer
C pas question d'être pointilleux.
C juste... dommage.
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web de l'utilisateur
dJu77
Nain(e) au biberon


Inscrit le: 26 Mai 2004
Messages: 4

MessagePosté le: Jeu 03 Juin, 2004 12:41    Sujet du message: Répondre en citant

Haiken a écrit:
ta fonction c'est max (abs(iXCurrent-iXDestination), abs(iYCurrent-iYDestination)) en fait ?

Heu.... Embarassed Ptet bien oui...
J'ai pas vérifié, mais je pense bien....
Désolé... Rolling Eyes

Et, pour ce qui est de :
Haiken a écrit:
c'est juste qu'il y a deux distances :
- la distance de déplacement
- la distance de vision (= portée des armes)

Je ne savais pas que c'était fait exprès... Confused
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé
hubs
Nain-stallé(e)


Inscrit le: 21 Fév 2003
Messages: 257

MessagePosté le: Jeu 03 Juin, 2004 12:43    Sujet du message: Répondre en citant

Tiens je pensais que ca aurait ete corrige dans la nouvelle mouture Twisted Evil
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé
kriska
Nain-stallé(e)


Inscrit le: 31 Aoû 2003
Messages: 294

MessagePosté le: Jeu 03 Juin, 2004 13:04    Sujet du message: Répondre en citant

pourquoi corriger quelque chose de logique et déja éxpliqué dans un ancien post (que je n'ai hélas pas pu trouver)...

en arrondissant avec pythagore on voit bien que la distance de deux cases en diagonales est équivalent à rac( 8 ) ~= 3

ce qui est tout à fait logique!

no problem 8)


-edit-

Merci Haiken (réponse plus bas)
c'est bien de ce post dont je parlais!!!


Dernière édition par kriska le Jeu 03 Juin, 2004 13:15; édité 1 fois
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé
Haiken
L'idole des naines, le Zorro des pubs


Inscrit le: 06 Mai 2002
Messages: 2495

MessagePosté le: Jeu 03 Juin, 2004 13:05    Sujet du message: Répondre en citant

Taozou a écrit:
Ok... mais quand il n'y a que 2 en diagonale, on devrait pouvoir tirer au Desert Eagle (par exemple), le pb est que dans la détect le nain est à 3... Donc pas d'option attaquer
C pas question d'être pointilleux.
C juste... dommage.


2 cases de déplacement en diagonale, ça fait 2 fois racine(2) soit environ 2,88 ==> arrondi à 3
C'est donc normal que tu ne puisses tirer...


Ou alors c'est que j'ai pas compris le problème

Edit : arf grillé par kiska Laughing
Edit : le post dont kriska fait mention : http://vieuxforum.nainwak.com/viewtopic.php?t=2131
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé Envoyer un e-mail Visiter le site web de l'utilisateur
Montrer les messages depuis:   
Ce forum est verrouillé; vous ne pouvez pas poster, ni répondre, ni éditer les sujets.   Ce sujet est verrouillé; vous ne pouvez pas éditer les messages ou faire de réponses.    Nainwak's World Index du Forum -> Centre d'étude des phénomènes paranormaux Toutes les heures sont au format GMT + 1 Heure
Page 1 sur 1

 
Sauter vers:  
Vous ne pouvez pas poster de nouveaux sujets dans ce forum
Vous ne pouvez pas répondre aux sujets dans ce forum
Vous ne pouvez pas éditer vos messages dans ce forum
Vous ne pouvez pas supprimer vos messages dans ce forum
Vous ne pouvez pas voter dans les sondages de ce forum


Powered by phpBB © 2001, 2005 phpBB Group
Traduction par : phpBB-fr.com