Conversion Lisp en c
Répondre à la discussion
Affichage des résultats 1 à 9 sur 9

Conversion Lisp en c



  1. #1
    inviteb6b93040

    Conversion Lisp en c


    ------

    Bonjour,

    il y a plus de 30 ans que je n'ai pas fait du lisp et pour convertir la transparence dans un fichier dxf, il y a ce code en lisp

    (fix (- 100 (/ (lsh (lsh transparency 24) -24) 2.55)))

    ça doit ressembler à ça mais je cale sur le 2.55
    int alpha=(-100/ (transparency << 24) << -24)

    Aurez vous l’amabilité de me le traduire en c ?

    -----

  2. #2
    inviteb6b93040

    Re : Conversion Lisp en c

    la syntaxe du lisp me reviens un peu, ça serait plutôt ça
    int alpha=100 - (transparency << 24 << -24)/ 255;

  3. #3
    invite0bbe92c0

    Re : Conversion Lisp en c

    Bonjour

    Pourquoi tenter de faire une conversion de code plutôt que repartir du problème et l'écrire en C ?

  4. #4
    inviteb6b93040

    Re : Conversion Lisp en c

    Parce que je n'ai que cet indice , ce n'est pas documenté dans la doc DXF car c'est un attribut de type AttDef normalement utilisé par d'autres applications qu'autocad.
    1001
    AcCmTransparency
    1071
    33554588

    J'ai fait un test mais transparency << 24 << -24 = 0 donc la traduction est mauvaise

  5. A voir en vidéo sur Futura
  6. #5
    inviteb6b93040

    Re : Conversion Lisp en c

    Un autre indice c'est qu'avec transparency = 33554588
    (fix (- 100 (/ (lsh (lsh transparency 24) -24) 2.55))) devrait être égal à 38 dans DwgTrueView ou 39 dans DraftSight

    autre proposition c'est (fix (- 100 (/ (logand transparency -33554433) 2.55)))
    on aurait alors (fix (- 100 (/ (logand 33554588 -33554433) 2.55))) = 38

    et ça marche

    100 - (33554588 & -33554433)/ 2.55 = 38.823529411764703

    Il sont fou chez autodesk d'avoir inventé un codage aussi ubuesque pour la transparence à moins que ce soit un clin d’œil à la transparence dans l'information

  7. #6
    inviteb6b93040

    Re : Conversion Lisp en c

    Maintenant je cherche la fonction inverse pour écrire un DXF avec transparence mais je bute sur le et logique dans l'équation

    transparency & -33554433 = (100 - alpha_pourcent) * 2.55 ;

    transparency = ?

  8. #7
    invite0bbe92c0

    Re : Conversion Lisp en c

    Le fait d'écrire des masquages en décimal n'aide pas à la compréhension.

  9. #8
    inviteb6b93040

    Re : Conversion Lisp en c

    et bien c'est comme une équation avec multiplication
    si transparency * -33554433 = (100 - alpha_pourcent) * 2.55 ;
    alors transparency =(100 - alpha_pourcent) * 2.55 / -33554433

    Mais avec la fonction et logique noté & en c++
    transparency =((100 - alpha_pourcent) * 2.55) & -33554433 ne marche pas
    car 33554588 != ((100 - 38.823529411764703) * 2.55) & -33554433 = 156

  10. #9
    inviteb6b93040

    Re : Conversion Lisp en c

    Je pense avoir trouvé, l'inverse du et serait le ou exclusif
    ça marche au signe prés
    avec alpha=39
    ((long)((100 - alpha) * 2.55)) ^ -33554433 = -33554588

Discussions similaires

  1. Lisp calcul matriciel
    Par invite69d38f86 dans le forum Programmation et langages, Algorithmique
    Réponses: 0
    Dernier message: 25/11/2012, 14h51
  2. Une question de débutant en lisp
    Par invite69d38f86 dans le forum Programmation et langages, Algorithmique
    Réponses: 0
    Dernier message: 10/06/2012, 16h05
  3. lisp: ou écrire les parenthèses?
    Par invite69d38f86 dans le forum Programmation et langages, Algorithmique
    Réponses: 0
    Dernier message: 01/06/2012, 19h21
  4. lisp dans maxima
    Par invite69d38f86 dans le forum Programmation et langages, Algorithmique
    Réponses: 4
    Dernier message: 15/02/2012, 22h39
  5. Conversion de base : connaître le nième chiffre sans faire toute la conversion
    Par invitebd8dbca5 dans le forum Mathématiques du supérieur
    Réponses: 5
    Dernier message: 02/07/2009, 20h14