SLV Posté(e) le 18 octobre 2017 Posté(e) le 18 octobre 2017 (modifié) Bonjour les gars, un salut tout particulier à VDH. j'ai pu utiliser le code que tu as poster pour réaliser le tracer d'une fonction. J'en avait particulièrement besoin pour le tracé de l'équation de la chainette y=(1/2a)x²+a, a étant le paramètre de la chainette en mètre. Les valeur de ce paramètre sont généralement supérieures à 500 m et n'excèdent pas 3000 m. Malheureusement je ne suis pas confortable avec le tracé produit. Elle devrait produire une parabole, la même que fait un conducteur électrique suspendu entre deux poteaux. Je voudrais savoir si mon code a un problème, si oui le quel. Merci d'avance. (defun c:chainette (/ pr x1 x2 p) (setq pr (getreal "Spécifiez le paramètre de la chainette en m: ") x1 (getreal "Spécifiez la borne inférieure de l'intervalle x1: ") x2 (getreal "Spécifiez la borne supérieure de l'intervalle x2: ") p (getreal "Spécifiez le pas p: ") ) (setq a '(/ 1 (* 2 pr))) (setq b '(pr)) (command "_pline") (foreach pt (bv:coord x1 x2 '(lambda (x) (+ x p)) '(lambda (x) (+ (* a x x) B)) ) (command "_none" pt) ) (command "") (princ) ) bv:coord étant définie comme suit: (defun bv:coord (a b e f) (if (>= a B) (cons (list b ((eval f) B)) nil) (cons (list a ((eval f) a)) (bv:coord ((eval e) a) b e f)))) Modifié le 18 octobre 2017 par didier mise en page du code
SLV Posté(e) le 18 octobre 2017 Auteur Posté(e) le 18 octobre 2017 L’émoticône avec le sourire représente b majuscule, je ne sait pas pourquoi il insiste pour s'afficher comme ça.
DenisHen Posté(e) le 18 octobre 2017 Posté(e) le 18 octobre 2017 L’émoticône avec le sourire représente b majuscule, je ne sait pas pourquoi il insiste pour s'afficher comme ça.tape "B )" avec un espace entre B et ) et la "traduction" des émoticônes ne se fera pas. Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
Aleck_Ultimate Posté(e) le 18 octobre 2017 Posté(e) le 18 octobre 2017 Salut. Je me disait bien : "Ça fout quoi dans le code tout ses sourires ?" C'est comme pour AutoCADémique que l'ont est obligés d'écrire aca.démique. Bon début de journée Je suis dysorthographique alors lâchez-moi les basques avec ça, je fait déjà de mon mieux. Membre d'Extinction Rebellion, car pour sauver le monde il n'est jamais trop tard, amour et rage ! Pour écrire un vraie point médian (e·x·e·m·p·l·e) [Alt + 0183] ou ajout d'un raccourci clavier personnalisé (ex. [AltGr + ;]) Utilisateur d'AutoCAD 2021 sous Windows 10
didier Posté(e) le 18 octobre 2017 Posté(e) le 18 octobre 2017 CoucouIl faut utiliser les balises pour mettre en page le code, c'est corrigé mais c'est mieux que ce soit fait par l'auteurPour le "bug" cité par Aleck Ultimate, ça date du temps où le site était géré par Patrick et ce grand adepte des techniques informatiques avait trouvé le moyen de taper AutoCAD à la place de a c a d***, et comme toujours le mieux est l'ennemi du bien maintenant on traîne ce fil à la patte... Le sujet proposé est intéressant mais j'aimerais savoir ce que tu réponds comme paramètre dans le cas présent Amicalement ***dans le cas présent il a fallu que je mette des espaces pour pallier la correction automatique, on a demandé à maintes reprises à CadMin de la supprimer mais, mais ... Éternel débutant... Mon site perso : Programmer dans AutoCAD
didier Posté(e) le 18 octobre 2017 Posté(e) le 18 octobre 2017 Coucou Elle devrait produire une parabole Si on est rigoureux, et nous le sommes, du moins je le suis, la courbe de la chaînette n'est pas à proprement parler une paraboleLien vers la courbe velaire : WIKI Le sujet reste tout autant passionnant Amicalement Éternel débutant... Mon site perso : Programmer dans AutoCAD
VDH-Bruno Posté(e) le 18 octobre 2017 Posté(e) le 18 octobre 2017 Malheureusement je ne suis pas confortable avec le tracé produit. Elle devrait produire une parabole Bonjour, Arf oui très drôle ça ;)Ci-dessous une version modifié qui devrait corrigé ce petit désagrément... (defun c:courbe (/ coefa coefb x1 x2 p) (setq coefa (getreal "\nSpécifiez le coefficient a: ") coefb (getreal "\nSpécifiez le coefficient b: ") x1 (getreal "\nSpécifiez la borne inférieure de l'intervalle x1: ") x2 (getreal "\nSpécifiez la borne supérieure de l'intervalle x2: " ) p (getreal "\nSpécifiez le pas p: ") ) (command "_pline") (foreach pt (setq lpt (bv:coord x1 x2 '(lambda (x) (+ x p)) '(lambda (x) (+ (* coefa x x) coefb)) ) ) (command "_none" pt) ) (command "") (princ) ) Pour la petite histoire le bug vient d'un problème de portée des variables a b, du fait que je quote mes fonctions anonymes, pas la temps de réécrire de code donc j'ai modifié le nom des variables A+ Apprendre => Prendre => Rendre
VDH-Bruno Posté(e) le 18 octobre 2017 Posté(e) le 18 octobre 2017 Je voudrais savoir si mon code a un problème, si oui le quel. Sinon pour le retour l'adaptation du code que tu as fait, est juste. Je te laisse le soin de le rependre sur le modèle de la correction ci-dessus Apprendre => Prendre => Rendre
SLV Posté(e) le 18 octobre 2017 Auteur Posté(e) le 18 octobre 2017 Bonjour, Arf oui très drôle ça ;)Ci-dessous une version modifié qui devrait corrigé ce petit désagrément... (defun c:courbe (/ coefa coefb x1 x2 p) (setq coefa (getreal "\nSpécifiez le coefficient a: ") coefb (getreal "\nSpécifiez le coefficient b: ") x1 (getreal "\nSpécifiez la borne inférieure de l'intervalle x1: ") x2 (getreal "\nSpécifiez la borne supérieure de l'intervalle x2: " ) p (getreal "\nSpécifiez le pas p: ") ) (command "_pline") (foreach pt (setq lpt (bv:coord x1 x2 '(lambda (x) (+ x p)) '(lambda (x) (+ (* coefa x x) coefb)) ) ) (command "_none" pt) ) (command "") (princ) ) Pour la petite histoire le bug vient d'un problème de portée des variables a b, du fait que je quote mes fonctions anonymes, pas la temps de réécrire de code donc j'ai modifié le nom des variables A+ Ok je vérifie ca tout à l'heure
x_all Posté(e) le 18 octobre 2017 Posté(e) le 18 octobre 2017 je m’immisce...C'est quoi ce (defun bv:.... merci quelques trucs sur autocad
VDH-Bruno Posté(e) le 18 octobre 2017 Posté(e) le 18 octobre 2017 je m’immisce...C'est quoi ce (defun bv:.... merci Mes initiales :) Apprendre => Prendre => Rendre
bonuscad Posté(e) le 18 octobre 2017 Posté(e) le 18 octobre 2017 A tout fin utile sur les paraboles, un truc que j'ai pompé sur un forum US je crois, donc merci à l'auteur. Si ça peut correspondre à ta demande? (defun C:PARABOLE ( / bod1 bod2 e l f x y i nd xp yp bod bodm) (initget (+ 1 16)) (setq bod1 (getpoint "\nPoint de départ: ")) (initget (+ 1 16)) (setq bod2 (getpoint bod1 "\nPoint final: ")) (setq xp (car bod1)) (setq yp (car (cdr bod1))) (setq l (- (car bod2) xp)) (princ "\nLargeur ordinale de la parabole: ") (princ l) (princ "\n") (setq e (- (car (cdr bod2)) yp)) (princ "\nHauteur ordinale de la parabole: ") (princ e) (princ "\n") (if (= l 0) (princ "\nErreur: ordonnées X équivalentes ") (progn (initget (+ 1)) (setq f (getdist "\nLongueur ordinale de la flèche: ")) (initget (+ 1 2 4)) (setq nd (getint "Nombre de segments: ")) (setq i 1) (repeat (1+ nd) (setq x (* (1- i) (/ l 1.0 nd))) (setq y (- (/ (* 4 f x x) 1.0 (* l l)) (* (- (/ (* 4 f) 1.0 l) (/ e 1.0 l)) x))) (setq bod (list (+ xp x) (+ yp y))) (if (= i 1) (progn (command "_.PLINE" "_none" bod)) (progn (command "_none" bod)) ) (setq bodm bod) (setq i (1+ i)) ) (command "") ) ) (princ) ) Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
lrdb@home Posté(e) le 18 octobre 2017 Posté(e) le 18 octobre 2017 bonjour , vieux souvenirs...la formule f=a²/(8xp) permet de dessiner la parabole ( au voisinage de zéro qui tend vers chainette )qui passe par les 2 poteaux et la flechef flèchea: distance horizontale entre les poteauxp: le parametre , qui est en fait la distance au foyer de la parabole en faisant un développement limité de cosh x au voisinage de zéro, tu obtiens cette formule , ne pas oublier que le cosh se défini aussi par les exponentielles !plus simple à définir en lisp surement .... write a book about what ??
lrdb@home Posté(e) le 26 octobre 2017 Posté(e) le 26 octobre 2017 Bonjour, juste pour faire avancer le schmi... pas autocad avec moi,en déplacement et de plus, je ne l'utilise très peu en faisant une recherche avec catenary curve lisp, on trouve des résulats et des lisp.une courbe catenaire est l'autre nom de la chainette.bonne journée write a book about what ??
philsogood Posté(e) le 26 octobre 2017 Posté(e) le 26 octobre 2017 pas autocad avec moi,en déplacement et de plus, je ne l'utilise très peu mon dieu t'as renié Microstation!!! bouh!! c'est mal!!!OK je sorsPhilPS : faut que j'arrète de polluer les posts!! :P Projeteur Revit Indépendant - traitement des eaux/CVC
lrdb@home Posté(e) le 26 octobre 2017 Posté(e) le 26 octobre 2017 mon dieu t'as renié Microstation!!! bouh!! c'est mal!!!OK je sorsPhilPS : faut que j'arrète de polluer les posts!! :Pbah microstation a un affichage tellement fluide !! sans regen ... et dessine des paraboles par 3 points ce qui me convient write a book about what ??
(gile) Posté(e) le 27 novembre 2017 Posté(e) le 27 novembre 2017 Salut, Comme dit plus haut, une chainette (catenary) n'est pas une parabole (même si les deux courbes sont proches au voisinage du sommet de la parabole c'est à dire pour une grande tension dans la chainette).Équation de la parabole : y = ax² + bx + cÉquation de la chainette : y = a cosh(x/a) ou a est le rapport entre la composante horizontale de la tension et la masse linéique. J'avais des trucs en .NET dans mes cartons (c'est plus difficile de faire l'equivalent en LISP), je l'ai mis au propre pour le proposer ici. Télécharger et installer CustomCurvesSetup.msi (compatible AutoCAD 2013-2019). La commande PARABOLE (_PARABOLA) dessine une spline de degrés 2 par points de contrôle qui représente "exactement" un arc parabolique et un point figurant son foyer.La commande CHAINETTE (_CATENARY) dessine une spline qui est une approximation d'une chaînette par points de lissage (le nombre de points est paramétrable de 7 à 255). L'utilisateur spécifie la "tension horizontale" (pour une masse linéique = 1) à la souris ou au clavier. Le nombre de points de lissage et la tension sont enregistrées dans le dessin. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
(gile) Posté(e) le 27 novembre 2017 Posté(e) le 27 novembre 2017 Un truc en LISP, mais sans les effets visuels (commande : CATENAIRE). (defun c:catenaire (/ catenary startPt endpt numPts tension) (defun catenary (startPt endPt numPts tension / cosh sinh asinh compute lg ht sp a b c pts x i) (defun cosh (x) (/ (+ (exp x) (exp (- x))) 2.) ) (defun sinh (x) (/ (- (exp x) (exp (- x))) 2.) ) (defun asinh (x) (log (+ x (sqrt (+ (* x x) 1.)))) ) (defun compute (x) (list x (+ (* tension (1- (cosh (/ (- x d1) tension)))) d2) 0.) ) (setq lg (- (car endPt) (car startPt)) ht (- (cadr startPt) (cadr endPt)) sp (/ lg (1- numPts)) a (/ ht (* 2. tension (sinh (/ lg (* 2 tension))))) b (+ (/ lg 2.) (* tension (asinh a))) c (* tension (1- (cosh (/ b tension)))) x (car startPt) d1 (+ (car startPt) B) d2 (- (cadr startPt) c) pts (list startPt) ) (repeat (setq i (- numPts 2)) (setq pts (cons (compute (setq x (+ x sp))) pts)) ) (reverse (cons endPt pts)) ) (setq numPts (vlax-ldata-get "GILE_CURVE" "NumFitPoints" 13)) (if (and (setq startPt (getpoint "\nPoint de départ: ")) (setq endPt (getpoint startPt "\nPoint de fin: ")) ) (if (setq tension (getdist startPt "\nTension horizontale: ")) (if (< (* 0.02 (abs (- (car startPt) (car endPt)))) tension) (progn (setq numPts (cond ((getint (strcat "\nNombre de points de lissage <" (itoa numPts) ">: "))) (T numPts) ) ) (if (< 6 numPts 256) (progn (command "_.spline") (foreach p (catenary startPt endPt numPts tension) (command "_non" p) ) (command "" "" "") (vlax-ldata-put "GILE_CURVE" "NumFitPoints" numPts) ) (prompt "\nLe nombre de point doit être compris entre 7 et 255 inclus.") ) ) (prompt "\nTension insuffisante.") ) ) ) (princ) ) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
(gile) Posté(e) le 28 novembre 2017 Posté(e) le 28 novembre 2017 Un autre LISP qui devrait être plus proche de la demande initiale : il dessine un arc parabolique d'équation réduite y=(1/2a)x² entre deux points. ;; Dessine un arc parabolique entre deux points ;; Équation réduite : y=(1/2a)x² (où a est le paramètre spécifié) (defun c:parachainette (/ p1 p2 pa) (setq pa (vlax-ldata-get "GILE_CURVE" "ParamParabole" 1000.)) (if (and (setq p1 (getpoint "\nPoint de départ: ")) (setq p2 (getpoint p1 "\nPoint de fin: ")) ) (progn (setq pa (cond ((getdist p1 (strcat "\nParamètre <" (rtos pa) ">: "))) (T pa) ) ) (vlax-ldata-put "GILE_CURVE" "ParamParabole" pa) (make_parabola p1 p2 (/ 1. (* 2 pa))) ) ) (princ) ) ;; make_parabola ;; Dessine une spline en arc parabolique entre deux points. ;; Retourne le nom d'entité de la spline. ;; ;; Arguments ;; p1 : point de départ (SCU courant) ;; p2 : point de fin (SCU courant) ;; pa : paramètre a de la parabole dans l'équation réduite : y = ax² (defun make_parabola (p1 p2 pa / x1 y1 x2 y2 dx p3) (setq x1 (car p1) y1 (cadr p1) x2 (car p2) y2 (cadr p2) dx (/ (+ y1 (- y2) (* pa (- (* x2 x2) (* x1 x1)))) (* 2. pa (- x1 x2)) ) p3 (inters p1 (mapcar '+ p1 (list 1. (* 2. pa (+ x1 dx)))) p2 (mapcar '+ p2 (list 1. (* 2. pa (+ x2 dx)))) nil ) ) (entmakex (list (cons 0 "SPLINE") (cons 100 "AcDbEntity") (cons 100 "AcDbSpline") (cons 71 2) (cons 72 6) (cons 73 3) (cons 74 0) (cons 40 0.0) (cons 40 0.0) (cons 40 0.0) (cons 40 1.0) (cons 40 1.0) (cons 40 1.0) (cons 10 (trans p1 1 0)) (cons 10 (trans p3 1 0)) (cons 10 (trans p2 1 0)) ) ) ) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
(gile) Posté(e) le 23 septembre 2018 Posté(e) le 23 septembre 2018 Salut, J'ai ajouté à CustomCurvesSetup.msi une commande ANSEDEPANIER (_BASKETHANDLE) pour tracer des anses de panier (Polyline) à 3 ou 7 centres. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Messages recommandés
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 compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant