Aller au contenu

Calcul de distance .....


Messages recommandés

Posté(e)

Salut a vous .....

 

Voila....Je me retourne de nouveau vers vous, car je n'arrive pas à récupérer et à additionner les données d'une liste ....

 

 (defun c:test ()

 ;initialisation des listes
 (setq list_pt ())
 (setq list_plength () )
 (setq add_list_plength () )

 (setq sp (getpoint "\n Point de départ: " ))

 (while (/= nil (setq ep (getpoint sp "\n Point suivant: " )))

        (setq plength (distance sp ep ))

        [b]  (setq list_plength ( append list_plength ( list plength )))[/b]
       ;;;Cette ligne me retourne une liste de nombre 
      ;;;  [surligneur] ( 1.414 1.414 2.285 )[/surligneur]
      ;;;et j'aimerais récupérer chaque atome de cette liste pour les additionner ...

        (setq sp ep )

   );fin de while

 (setq length_list (length list_plength ))

 

jusqu'ici tout va bien ...

 

(setq n 0 )

 

(while (< n length_list )

 

(setq total_length_list (nth n list_plength ))

 

;;;(read list_plength )

;;;(setq add_list_plength (substr list_plength 2 2))

;;;(setq add_list_plength ( 1+ total_length_list ))

 

(print total_length_list )

;;;ce test me retourne les éléments de la liste et la boucle marche ....

(setq n (1+ n ))

);fin de while

(princ)

);fin de defun

 

(substr string start [length])

j'ai penser utiliser ( substr (list_plength) (nth n list_plength) [length] )

mais une distance étant un nombre a virgule dans le cas de mon projet

(length) étant un reèlle je ne vois pas comment sortir un nombre

ex: 1.414 .

 

Et puis je pense que ce code peux servir pour autre chose ......

 

(setq list_pt (append list_pt ( list sp ) (list ep )))

 

LIST_PT = ((0.0 0.0 0.0) (1.0 1.0 0.0) (1.0 1.0 0.0) (2.0 2.0 0.0) (2.0 2.0 0.0) (3.0 3.0 0.0))

 

Bon voila ....Si vous pouvez me renseigner ......

 

 

 

 

 

Posté(e)

Il y a cette possibilité, j'ai le code mes de Patrick qui m'a un peu éclairé .....

 

 

 (defun c:test ()

 ;initialisation des listes
 (setq plength 0 )

 (setq sp (getpoint "\n Point de départ: " ))

 (while (/= nil (setq ep (getpoint sp "\n Point suivant: " )))

        (setq plength (+ plength (distance sp ep )))

        (setq sp ep )

   );fin de while

 (print plength )
  
(princ)
 
 );fin de defun 

 

 

Ca marche bien, en faite j'ingorais que l'on pouvait additionner des variables avec elles meme .

Peux etre que je me complique trop la tache ....

 

Mais j'aimerais quand même savoir comment extraire des données réelles d'une liste ?????.

 

 

 

Posté(e)

Salut,

Il y cette manière (il doit y avoir plus simple) :

 

 (setq liste '(1.414 1.414 2.285))

(setq x 0
     ad 0)
(repeat (length liste)
 (setq ad (+  [b] (nth x liste)[/b] ad))
 (setq x (+ x 1))
 )
(princ ad)
(princ)

 

[Edité le 31/10/2006 par Bred]

Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...

Posté(e)

Merci les gars ....

 

Mais et le subtstr

 

(substr string start [length])

j'ai penser utiliser ( substr (list_plength) (nth n list_plength) [length] )

mais une distance étant un nombre a virgule dans le cas de mon projet

(length) étant un reèlle je ne vois pas comment sortir un nombre

ex: 1.414 .

 

 

 

Posté(e)

Mais et le subtstr

 

substr est une fonction qui retourne une portion de chaine de caractère (string) :

 

(substr "string" 3) retourne "ring"

 

(substr "string" 2 3) retourne "tri"

 

Je ne comprends pas bien ce que tu veux faire, alors quelques exemples :

 

(nth 0 '(1.414 1.732 2.285)) retourne 1.414 pemier élément

 

(nth 1 '(1.414 1.732 2.285)) retourne 1.732 deuxième élément

 

(nth 2 '(1.414 1.732 2.285)) retourne 2.285 troisième élément

 

(member 1.732 '(1.414 1.732 2.285)) retourne (1.732 2.285) la liste à partir de 1.732

 

Hé ben, c'est qui Lucky Luke ?

 

[Edité le 31/10/2006 par (gile)]

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

Posté(e)

Probablement, j'ai compris mal la tâche... :exclam:

 

L'exemple du travail avec la liste, comme avec le texte

(substr string start [length])

(test liste start length)

 

(defun test (lst s e)
 (if (> s 1)
   (test (cdr lst) (1- s) e)
   (if (and lst (or (not e)(> e 0)))
     (cons (car lst) (test (cdr lst) s (if e(1- e))))
   ) ;_  if
 ) ;_  if
) ;_  defun
;; Le test
(test '("a" "b" "c" "d" "e" "f") 1 nil);=>("a" "b" "c" "d" "e" "f")
(test '("a" "b" "c" "d" "e" "f") 3 nil);=>("c" "d" "e" "f")
(test '("a" "b" "c" "d" "e" "f") 1 3);=>("a" "b" "c")
(test '("a" "b" "c" "d" "e" "f") 3 2);=>("c" "d")

Evgeniy

Posté(e)

Re merci les gars .....

 

Tout simplement

définition autocad [surligneur] (substr string start [length]) [/surligneur]

 

je pensais à ça :

(substr

(string) qui est ma (list_plength) => (1.414 1.732 2.285)

les chiffres contenus dans la liste sont t'ils des String ou real ?????

 

(setq plength (distance sp ep ))
            (setq list_plength ( append list_plength ( list plength )))

vu que la distance retourné est un chiffre ....

dans quel cas Substr ne marche pas ??????

 

(start) = (nth n list_plength) mon ième élément de la liste càd n=0 et list_plength :1.414

 

(length) = nombre de chiffre après la virgule ..... mais là stupido ?????

 

En faite voila je ne sais pas si j'ai été claire ???????

 

Posté(e)

Bon ..... :cool:

 

Dans mon code ,

je calcule une distance,

(setq plength (distance sp ep ))

 

que je renvois a une liste

(setq list_plength ( append list_plength ( list plength )))

dans ce cas => (1.414 1.732 2.285)

 

et avec Substr

je voudrais récupérer chaque element de cette liste pour les additionnés .

 

Donc j'ai pensé à

(start) = (nth n list_plength) mon ième élément de la liste càd n=0 et list_plength :1.414

et

(length) = nombre de chiffre après la virgule (mais dans ce cas après réflexion ne marche pas )

 

 

Posté(e)

Comme dit plus haut, substr traite une chaine de caractères (premier argument).

 

Tu veux traiter une liste, donc oublie substr.

 

Comme dit plus haut toujours, pour avoir la somme de tous les nombres contenus dans list_plength, tu peux utiliser la fonction apply :

 

(apply '+ '(1.414 1.732 2.285)) ->5.431

 

La fonction apply équivaut à un (eval (cons ...)), on pourait donc écrire :

 

(eval (cons '+ '(1.414 1.732 2.285))) qui est interprété, en décomposant :

 

(eval '(+ 1.414 1.732 2.285))) -> (+ 1.414 1.732 2.285) -> 5.431

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

Posté(e)
(defun 3d-pt (lst)
 (if lst
   (cons (list (car lst) (cadr lst)(caddr lst)) (3d-pt (cdddr lst)))
 ) ;_  if
)
(3d-pt '("a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l"))
; => (("a" "b" "c") ("d" "e" "f") ("g" "h" "i") ("j" "k" "l"))

Evgeniy

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é