Aller au contenu

boucle pour calculer des distances ??


Messages recommandés

Invité spartacuss
Posté(e)

BONJOUR

 

salut tout le monde j'ai une liste (cord) qui lui aussi contient des listes et ces listes contiens des cordonnes et je veux calculer la distance entre chaque point et touts les autres points ,voila un exemple de de la liste que j'ai :

(((0.0 115.0) (30.0 115.0) (30.0 30.0) (115.0 30.0) (115.0 0.0) (0.0 0.0) (0.0 115.0)) ((3281.0 115.0) (3311.0 115.0) (3311.0 0.0) (3196.0 0.0) (3196.0 30.0) (3281.0 30.0) (3281.0 115.0)) ((905.5 519.5) (928.911 517.194) (951.422 510.366) (972.168 499.276) (990.353 484.353) (1005.28 466.168) (1016.37 445.422) (1023.19 422.911) (1025.5 399.5) (1023.19 376.089) (1016.37 353.578) (1005.28 .........................

j'ai fait le programme suivant mais ça marche pas comme prévue , quelqu'un peut m'aider SVP

 

(setq 
       r 0
       j 0
       k 0
	q 0
	dist1 nil
       dist2 nil
	dist3 nil
	dist4 nil
       a (length cord)
       b (length (nth r cord))
       c (length (nth (1+ r) cord))       
   )
   (while (< r a)
        (setq e (- a (1+ r)))
		(setq q r)
        (while (< q e)
		        (while (< j b)
				        ;(setq dist1 nil)
					    (while (< k c)
                                   (setq dist (distance (nth j (nth r cord)) (nth k (nth (1+ q) cord))))
								 (setq k (1+ k))
								(setq dist1 (append dist1 (list dist)))
						)
						(setq dist2 (append dist2 (list dist1)))
						(setq j (1+ j))
				)
				(setq dist3 (append dist3 (list dist2)))
				(setq q (1+ q))
		)
		(setq dist4 (append dist4 (list dist3)))
		(setq r (1+ r))
   )
   (princ dist2)] 

Posté(e)

Salut,

 

Pourrais tu plutôt donner un exemple simple d'une liste entrée (courte mais significative) et du type de liste que tu veux en sortie.

Parce que là, pour moi, c'est complètement incompréhensible.

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Invité spartacuss
Posté(e)

RE

 

 

la liste que j'ai donner c'est la liste d'entres mais voila un autre exemple :

(((10.0 20.0)(54.8 87.2)(47.25 58.02)(1251.21 58.12))((10.2 45.3)(87.35 48.35) (487.254 789.21)(2415.25 20.02))....................................................)

je veux calculer la distance entre chaque point et touts les autres points par exemple entre

le point P1: (10.0 20.0) et touts les points des autres listes ,sauf les points de la liste qui contient le point P1

 

merci pour ta réponse

 

 

 

Invité spartacuss
Posté(e)

RE2

 

 

type de liste que je veux en sortie :

((3281.0 3311.0 3313.0 3198.07 3197.13 3282.1 3281.0) (210.21 587.21 6587.02) ............)

Invité spartacuss
Posté(e)

plus claire

 

voila j'ai un liste (cord) cette liste contient des listes list(i) et list(i) contient des cordonnes :

cord :(list1 list2 list3 list4 list5 ............list® .........................list(n))

list1:(p1 p2 p3 p4 p5 .............pj..........................pm)

list2:(q1 q2 q3 q4 .............qj.......................qz)

list3:(s1 s2 s3 s4 s5 sj ........................sx)

.

.

.

.

.

je veux calculer le différentes distance exemple : distance entre p1 etq1,p1 et q2,p1 et q3 ,p1et qJ ..................p1 et S1 ,p1 ets2 , p1 et s3 .............. même chose pour p2 ....à pm ,puis la distance entre q1et s1 , q1 et s2 q1 et s3 .......................... et je continue jusqu’à le calcule de toutes les distances et les distances pour chaque point les mettent dans une listes :

((distance11 distance12 .............................)(distance 21 distance22 distance23 .........................

ou distance11 est la distance entre p1 et q1

Posté(e)

Désolé, mais je ne vois toujours pas bien la corrélation entre ta liste en entrée et ta liste en sortie...

 

Je pense qui si tu ne peux pas exprimer clairement ce que tu veux faire en français, tu auras du mal à l'écrire en LISP.

 

Par exemple, avec cette liste, quelle doit être la liste retournée :

'(
 ((0.0 0.0) (12.0 0.0) (5.0 8.0))
  ((254.0 126.0) (321.0 154.0) (295.0 99.0))
  ((584.0 12.0) (536.0 21.0) (547.0 10.0))
)

 

Les sous listes de points ont-elle toutes la même longueur ?

Le nombre de sous listes est-il défini ?

 

 

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Invité spartacuss
Posté(e)

re

 

le nombre de sous liste oui est définie ,mais la longueur des liste n'est pas le même

pour ton exmple :

((la distance entre : (0.0 0.0) et (254.0 126.0) , la distance entre (0.0 0.0) et (321.0 154.0) ,(0.0 0.0) et

(295.0 99.0))(la distance entre (12.0 0.0) et (254.0 126.0) , (12.0 0.0) et (321.0 154.0) , (12.0 0.0) et

(295.0 99.0))( la distance entre :(254.0 126.0) et (584.0 12.0), (584.0 12.0) et (536.0 21.0) ainsi de suite jusqu'à la distance entre (295.0 99.0) et (547.0 10.0)))

 

Posté(e)

Essaye ça (je vois mal comment faire sans fonctions récursives) :

 

(defun foo (lst / bar)
 (defun bar (lst1 lst2)
   (if	lst1
     (append
(mapcar	'(lambda (l)
	   (mapcar '(lambda (p) (distance (car lst1) p)) l)
	 )
	lst2
)
(bar (cdr lst1) lst2)
     )
   )
 )
 (if (cdr lst)
   (append (bar (car lst) (cdr lst)) (foo (cdr lst)))
 )
) 

 

Mais si c'est en rapport avec ce sujet, je vois mal comment tu vas traiter le résultat. De plus les distances entre les sommets ne reflète pas les distances entre les polylignes...

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Invité spartacuss
Posté(e)

re

 

 

oui c vrai c'est pour le même sujet je pense que si je calcule la distance entre les sommets des lwpolylignes je peut arriver au calcule de la distance entre les lwpolylignes :( mais je c’est pas que c'est juste ou non , si vous avez une autre aidés je serrai reconnaissant , et merci beaucoup pour le temps que vous avez consacré a ce sujet

 

cordialement

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer. Politique de confidentialité