Aller au contenu

[Challenge] Spirale de Fibonacci


(gile)

Messages recommandés

Le 04/08/2022 à 11:34, (gile) a dit :

Pour donner quelque chose d'un peu différent des précédentes réponses, je voudrais juste montrer comment on peut calculer les sommets de la polyligne sans utiliser la fonction polar. Dans les routines suivantes, les variables ou arguments n et m stockent deux termes consécutifs de la suite de Fibonacci, les variables ou arguments x et y stockent les signes (+1 ou -1) utilisés pour déplacer le sommet.

Bonsoir,

Petite variation du code de (gile) pour le plaisir de montrer la souplesse du langage, donc si on ne voulait pas passer par le calcul en coordonnée polaire, et préférer passer par le calcule des coordonnées cartésiennes.

La variante suivante travaille directement sur les d'opérateurs mathématiques,  les arguments fx et fy stockent les opérandes de déplacement (+ -), dans le même esprit que la proposition de BonusCAD, ceci en remplacement des coefficients directeurs +1 ou -1 utilisé dans le code d'origine.

(defun fibSpiral (p i / loop b)
  (setq b (- (sqrt 2.) 1.))
  (defun loop (i px py  n m fx fy)
      (vl-list*	(list 10 px py)
		(cons 42 b)
		(if (< 0 i)
		  (loop	(1- i) (fx px m) (fy py m) m (+ n m) (if (= fy -) + -) fx)
		)
      )
  )
  (entmakex
    (append
      (list
	(cons 0 "LWPOLYLINE")
	(cons 100 "AcDbEntity")
	(cons 100 "AcDbPolyline")
	(cons 90 (+ i 1))
      )
      (loop i (car p) (cadr p) 0 1 - +)
    )
  )
)

 

Apprendre => Prendre => Rendre

Lien vers le commentaire
Partager sur d’autres sites

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é