Aller au contenu

Super ellipse


kclement

Messages recommandés

Bonjour,

 

Un collègue a trouvé ce LISP pour dessiner une super ellipse :

 

 ;;SUPERELLIPSE
;;By carlB AutoLisp forum for herrgrek
;;
;x=a*|cos t|^(2/n)
;;y=b*|sin t|^(2/n)
;;where: (pi/2)≥ t ≤ pi
;;
;;a=90
;;b=45
;;n=2.5

(princ "Type SUPER to start")
(defun c:super (/ a b n ang_i ang_min ang_max ptlist plotpts pt_i pt)
  ;;defaults
  (setq ptlist nil Plotpts nil)
  (setq 
      a 90
      b 45
      n 2.5
      ang_min (/ pi 2)
      ang_max pi
  )
  (setq ang_step (/ pi 360));;angular step for calculations
  (setq ang_i ang_min)
  (while (<= ang_i ang_max)
    (setq x (* a (expt (abs (cos ang_i)) (/ 2 n))))
    (setq y (* b (expt (abs (sin ang_i)) (/ 2 n))))
    (setq pt_i (list x y))
    (setq PtList (cons pt_i ptlist))
    (setq ang_i (+ ang_i ang_step))
  )
  (setq ptlist (reverse ptlist))
  (setq Plot_base (getpoint "\nPick origin for plot: "))
  (setq PlotPts (mapcar '(lambda (xy) (mapcar '+ Plot_Base xy)) PtList))
  (command "_pline")
  (foreach Pt PlotPts
      (command pt)
   )
  (command "")
  (princ)
)

 

Ca fonctionne bien mais le problème c'est qu'on est obligé de rentrer dans le lisp pour changer les valeurs, a, b et n.

 

Y aurait-il un moyen pour que le lisp demande d'entrer ces valeurs directement dans la ligne de commande ?

 

Merci d'avance...

Lien vers le commentaire
Partager sur d’autres sites

Salut,

 

Au delà du fait que le LISP ne permet pas, en l'état, de spécifier de valeurs, la polyligne créée (qui n'est constituée que de segments droits) est assez loin de figurer un arc elliptique.

 

Avant de chercher à modifier ce LISP, je te propose d'essayer la commande PELL (voir ce sujet) qui offre les mêmes option que la commande ELLIPSE (dont Arc) mais crée une polyligne constituée d'arcs beaucoup plus proche de la vraie ellipse.

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

Lien vers le commentaire
Partager sur d’autres sites

Merci de vos réponses.

 

la polyligne créée (qui n'est constituée que de segments droits) est assez loin de figurer un arc elliptique

 

En fait, mon collègue m'a expliqué que c'est une autre géométrie qu'une ellipse, c'est une sorte d'ellipse écrasée qui tend vers le rectangle (qui s'appelleait superellipse)... Et apparemment le résultat obtenu lui convient tout à fait.

 

tu peux utiliser getreal

(setq a (getreal "Quelle est la valeur de a ?"))

 

D'accord, mais je mets ça à quel endroit dans le code ? J'utilise pas mal de lisps péchés sur ce forum, mais j'ai encore du mal à identifier tout ce que contient un lisp...!

 

 

Lien vers le commentaire
Partager sur d’autres sites

Re,

 

;;SUPERELLIPSE
;;By carlB AutoLisp forum for herrgrek
;;
;;x=a*|cos t|^(2/n)
;;y=b*|sin t|^(2/n)
;;where: (pi/2)? t ? pi
;;
;;a=90
;;b=45
;;n=2.5

(princ "Type SUPER to start")
(defun c:super (/ a b n ang_i ang_min ang_max ptlist plotpts pt_i pt)
 (initget 6)
 (or (setq n (getreal "\nSpécifiez la valeur de n : "))
     (setq n 2.5)
 )
 (if
   (and
     (setq Plot_base (getpoint "\nSpécifiez le centre: "))
     (setq a (getdist plot_base
              "\nSpécifiez la longueur du demi grand axe: "
         )
     )
     (setq b (getdist plot_base
              "\nSpécifiez la longueur du demi petit axe: "
         )
     )
   )
    (progn
      (setq ang_min  (/ pi 2)
        ang_max  pi
        ang_step (/ pi 360)
        ;;angular step for calculations
        ang_i    ang_min
      )
      (while (     (setq x (* a (expt (abs (cos ang_i)) (/ 2 n))))
    (setq y (* b (expt (abs (sin ang_i)) (/ 2 n))))
    (setq pt_i (list x y))
    (setq PtList (cons pt_i ptlist))
    (setq ang_i (+ ang_i ang_step))
      )
      (setq ptlist (reverse ptlist))
      (setq PlotPts
         (mapcar '(lambda (xy) (mapcar '+ Plot_Base xy)) PtList)
      )
      (command "_pline")
      (foreach    Pt PlotPts
    (command "_non" pt)
      )
      (command "")
    )
 )
 (princ)
)

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

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

par grand hasard kclement tu ne bosse pas dans l'hydraulique.

Ton équation s'approche d'une formule que j'utilise pour les seuil.

DAO: AutoCAD(2D & 3D), Covadis

CAO: 3D's MAX, Rhinoceros 3D, REVIT

GeoModeliSation: AutoCAD MEP, RhinoTerrain

Rendu: Vray for Rhino, Keyshot, Lumion

Programmation: Grasshopper, Dynamo, VisualStudio

 

C.V.

Profil LinkedIn

Book

Site web

 

http://nsa37.casimages.com/img/2016/09/26/160926023334168603.jpg

Lien vers le commentaire
Partager sur d’autres sites

Bonjour rhymone,

 

Pour répondre à ta question, non, je suis architecte (je sais que cetains membre de ce forum pensent que les archis travaillent n'importe comment, mais je vous jure qu'on ne travaille pas tous QUE dans le calque 0 !)

 

Pour (gile), merci ça a bien fonctionné, sauf qu'il manquait la possibilité d'entrer la valeur n, j'ai donc ajouté la ligne :

 

 (setq n (getreal "\nSpécifiez la valeur de n: "))

 

(merci Carboleum)

 

et c'est parfait !

 

A bientôt !

Lien vers le commentaire
Partager sur d’autres sites

Salut,

 

Je suis content que ça te convienne et que tu aies réussi à modifier le code comme tu voulais.

J'ai modifié le code en conséquence en ajoutant un petit plus :

- l'utilisateur ne peut entrer qu'une valeur strictement positive (0 génère une erreur division par 0 et une valeur négative une courbe infinie) ;

- une valeur par défaut (2.5).

(initget 6)
 (or (setq n (getreal "\nSpécifiez la valeur de n : "))
     (setq n 2.5)
 )

 

Pour ma culture personnelle, j'ai fait quelque recherches. Cette équation définit ce qu'on appelle les courbes de Lamé qui varient suivant la valeur de n. SuperEllipse est le nom donné par les anglo-saxons à ces courbes (ou plus particulièrement, suivant les auteurs, à celle générée avec une valeur de n de 2.5).

 

En ne dessinant qu'un quart de la courbe (comme le fait le LISP) avec a = b

n = 1 -> segment de droite

n = 2 -> quart de cercle (ou d'ellipse si a /= b)

0 arcs de parabole

n hyperboles

 

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

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é