Distance entre 2 points

Ici, on fait dans le petit, le LCD qui déchire sa race, on y cause même calculatrices quand on est en manque !

Modérateur : Politburo

Répondre
Ben
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 1549
Enregistré le : 21 août 2016 19:04

Distance entre 2 points

Message par Ben »

Salut,

Je ne sais pas si le sujet a déjà été traité, j'ai fait quelques recherches, je n'ai rien trouvé.

J'ai passé quelques heures cette après-midi pour calculer la distance entre points sur l'écran d'un ordinateur (on parle de pixels). Prenons, tout a fait au hasard, la résolution d'un CBM-64, 320 points horizontalement et 200 points verticalement. Ce qui fait un total de 64.000 points.
Partons du principe que les points sont numérotés séquentiellement de 1 à 64.000 horizontalement.
Prenons quelques exemple de points:
- 320 : dernier point de la première ligne.
- 321: premier point de la deuxième ligne.
- 63681: premier point de la dernière ligne.
- 64000: dernier point de la dernière ligne.

L'utilisateur introduit deux numéros de point (par exemple 1 et 63681) et le programme calcule la distance (199).

Je me suis amusé sur le PB-100 cette fois-ci :-) je vous livre directement mon programme. Je pense que ce "problème" trouverait une réponse dans les 10 min de toute façon.

Pour ceux qui veulent essayer ...

Pour les autres, voici comment j'ai fait. Je calcule les coordonnées des points grâce à la sous routine en ligne 100. Attention, le point 1 à comme coordonnée (1,1), pas (0,0) et donc, le dernier point est en (320,200). Il y a, évidemment, moyen d'optimiser tout ça. D'ailleurs, je me dis qu'il faudrait éliminer ce test en 110

Ben

Code : Tout sélectionner

10 input"P1=";n:gosub100:a=w:b=z
20 input"P2=";n:gosub100:c=w:d=z
30 e=sqr((c-a)^2+(d-b)^2)
40 print "DIST=";e
90 end
100 z=int(n/320):w=n-z*320
110 if w=0;w=320:goto130
120 z=z+1
130 return
Modifié en dernier par Ben le 03 mars 2019 10:08, modifié 1 fois.
Avatar du membre
Hobiecat
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 3636
Enregistré le : 06 sept. 2011 14:57
Localisation : Normandie

Re: Distance entre 2 points

Message par Hobiecat »

Ça aurait fait un bon MPO ! :wink:

Il y a un petit bug à ta ligne 20 : c'est d=z à la fin de la ligne. Je ne suis pas sûr qu'on puisse optimiser beaucoup sur le PB-100 qui manque de fonctions permettant de raccourcir. En revanche sur un Basic Casio plus puissant, un Sharp ou sur des algébriques TI ou HP, oui on doit pouvoir bien optimiser. 8)
Avatar du membre
Marge
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 6186
Enregistré le : 01 oct. 2008 14:39
Localisation : En bas, tout au fond à gauche.

Re: Distance entre 2 points

Message par Marge »

Oui, c'est ça, ça s'appelle un MPO. Bienvenue au club !
3 hommes, 3 demis, un 3a... Magnéto, Serge !

Quelques-uns de mes petits programmes pour machines Hewlett-Packard :
15C : Knight's Tour ;
29C : (k-)Permutations, Combinations, Linear Regression and Pseudo-random number ;
34C : Hanoi Towers - Automatic & Manual resolutions ;
67
__: A L I E N .

« Boris », c'était juste Maurice enrhumé.
Nikass
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 941
Enregistré le : 12 nov. 2015 22:00
Localisation : trouducul du 31 et 34 aux lunes bleues

Re: Distance entre 2 points

Message par Nikass »

Dites... J'y fous jamais les pieds d'habitude dans vos trucs de pockets, mais là, y'a une question qui se pose.

Ca veut pas dire grand chose la distance en pixels directe, me trompe-je ? Au pire du pire, ça revient à tracer une droite entre les deux points (Bresenham, toussa) et à compter les pixels nécessaires... ce que tu fais en utilisant du floating et en arrondissant, ce qui n'est pas toujours optimal d'une part et ce qui est lourd à calculer, non ? sinon, pourquoi ce genre d'algo a t-il été développé ?

Bon, j'ai assez dit de conneries, maintenant le feu est allumé alors je retourne me planquer :lol: :lol:

a+
Ben
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 1549
Enregistré le : 21 août 2016 19:04

Re: Distance entre 2 points

Message par Ben »

Hobiecat a écrit : 02 mars 2019 20:32 Il y a un petit bug à ta ligne 20 : c'est d=z à la fin de la ligne
Effectivement, j'ai corrigé, merci :-)
Répondre

Retourner vers « Tous les Pockets »