IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Lisp Discussion :

Syntaxe pour un programme en AutoLISP


Sujet :

Lisp

  1. #1
    Membre habitué
    Inscrit en
    Mars 2002
    Messages
    230
    Détails du profil
    Informations personnelles :
    Âge : 61

    Informations forums :
    Inscription : Mars 2002
    Messages : 230
    Points : 127
    Points
    127
    Par défaut Syntaxe pour un programme en AutoLISP
    Bonjour,

    J'ai un petit projet, que je veux écrire en AutoLISP. Mon principal problème est que je suis sutout habitué au language pascal (Lazarus) que j'utilise dans mes temps libres!
    Etant géométre de profession, je veux faire un programme où je peux calculer/dessinner automatiquement la position orthogonal d'un point par rapport à une ligne.
    J'ai commencé à regarder sur internet avant de me lancer dans le codage, mais j'ai des problèmes concernant la syntaxe avec l'utilisation des variables, COND, If...
    Pouvez-vous s'il vous plaît jeter un oeil sur mon algoritme et me dire, où je dois chercher pour trouver des solutions.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    Choose the first point to define your reference line
    	(setq pt1(getpoint "\n Start Point: "))
    	(setq pt1x (car pt1))
    	(setq pt1y (cadr pt1))
    
    Choose the second point to define your reference line
    	(setq pt2(getpoint "\n End Point: "))
    	(setq pt2x (car pt2))
    	(setq pt2y (cadr pt2))
    
    Choose the point you want to have perpendiculary measured (and drawn) to the reference line
    (setq temppt(getpoint "\n Point to calculate: "))
    (setq tempptx (car temppt))
    (setq temppty (cadr temppt))	
    
    Voila où je commence á rencontrer des problèmes:
    i sont les coordonnées du point calculé sur la ligne
    
    EPS    = 0.000001;         // smallest positive value: less than that to be considered zero
    EPSEPS = EPS * EPS;        // and its square
    
    function SqLineMagnitude(const pt1x, pt1y, pt2x, pt2y: extended): extended;
    res := (pt2x - pt1x) * (pt2x - pt1x) + (pt2y - pt1y) * (pt2y - pt1y);
    AutoLISP: (defun SqLineMagnitude (+(* (- pt2x pt1x)(- pt2x pt1x))(*(- pt2y pt1y) (- pt2y pt1y)))
    
    begin
     SqLineMag := SqLineMagnitude(pt1x, pt1y, pt2x, pt2y);
     if SqLineMag < EPSEPS then exit;// Calculation not possible, choose one another point
     
    u := ( (tempptx - pt1x)*(pt2x - pt1x) + (temppty - pt1y)*(pt2y - pt1y) ) / SqLineMag;
    AutoLISP: (defun u (+(* (- tempptx pt1x)(- pt2x pt1x))(*(- temppty pt1y) (- pt2y pt1y)))
    
    if (u < EPS) or (u > 1) then
    ix := SqLineMagnitude(tempptx, temppty, pt1x, pt1y);
    iy := SqLineMagnitude(tempptx, temppty, pt2x, pt2y);
     
    else  // if (u > EPS) or (u < 1) then
    ix := pt1x + u * (pt2x - pt1x);
    iy := pt1y + u * (pt2y - pt1y);
    result := SqlineMagnitude(px, py, ix, iy);
     
    
    // finally convert to actual distance not its square
    result := sqrt(result);
    
    Quand tout cela fonctionnera, je dessinerais une flêche qui montre la direction á suivre du point pour rencontrer ma ligne de référence ainsi que la distance en millimetres.
    Je demanderais en suite á l'utilisateur, si il veux continuer avec un autre point ou arrêter (á l'aide de CANCEL/Echap)
    J'ai également lu qu'il était recommandé d'utiliser COND á la place de IF. Qu'en pensez vous?
    Je suis preneur d'idées!
    Sincérement
    Jean-Christophe

  2. #2
    Membre habitué
    Inscrit en
    Mars 2002
    Messages
    230
    Détails du profil
    Informations personnelles :
    Âge : 61

    Informations forums :
    Inscription : Mars 2002
    Messages : 230
    Points : 127
    Points
    127
    Par défaut
    Bonjour,

    Je fais remonter le sujet, car je n'ai pas encore eu de réponses!

    -Suis je dans le mauvais forum?
    -Est ce que ma question est mal formulée?
    -Autre raison?
    Sincérement
    Jean-Christophe

  3. #3
    Membre actif
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    152
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mai 2013
    Messages : 152
    Points : 275
    Points
    275
    Par défaut
    Bonjour,

    Il semble qu'il n'y a pas de ceux qui se débrouillent dans AutoLisp. C'est un dialect assez particulier qui n'est pas utilisé que par un seul logiciel de dessin technique, en plus pas libre.

    À propos, on peut faire des dessins géométriques à l'aide de Asymptote, il y a même un paquet spécial, geometry. Mais le langage qu'on y utilise, ce n'est pas lisp...

  4. #4
    Membre habitué
    Inscrit en
    Mars 2002
    Messages
    230
    Détails du profil
    Informations personnelles :
    Âge : 61

    Informations forums :
    Inscription : Mars 2002
    Messages : 230
    Points : 127
    Points
    127
    Par défaut
    OK merci byjav!
    Bonne journée
    Sincérement
    Jean-Christophe

Discussions similaires

  1. [Système] syntaxe pour lancer un autre programme
    Par mioke dans le forum Langage
    Réponses: 3
    Dernier message: 28/05/2008, 11h08
  2. [syntaxe] pour executer un programme
    Par Mireyu_c dans le forum Général Python
    Réponses: 2
    Dernier message: 15/03/2006, 15h09
  3. Syntaxe pour avoir un seul resultat dans une requete
    Par Pompil dans le forum Requêtes
    Réponses: 2
    Dernier message: 06/09/2003, 15h51
  4. [LG]Divers problémes pour un programme.
    Par Horus TCT dans le forum Langage
    Réponses: 14
    Dernier message: 24/05/2003, 23h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo