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

Langage Pascal Discussion :

Équivalent de la fonction MAP du C


Sujet :

Langage Pascal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Janvier 2004
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 68
    Par défaut Équivalent de la fonction MAP du C
    Bonjour,

    Me revoilou avec mes questions bizares

    En C, on utilise MAP pour calibrer une valeur :
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    int axeay = map(ay, -17000, 17000, 0, 180);
    Mais...en Pascal ? Une équivalence ?

    Merci de m'avoir lu.
    J'oubliais, c'est pour convertir en degrés des valeurs de capteur d'angle.

  2. #2
    Membre très actif

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2013
    Messages
    411
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2013
    Messages : 411
    Billets dans le blog
    2
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    function map(const X: double; const fromLow, fromHigh, toLow, toHigh: double): double;
    var 
      a,b: double;
    begin
      a := (toHigh - toLow) /  (fromHigh - fromLow) ;
      b := -fromLow * a;
      Result := a * x + b;
    end;

  3. #3
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 489
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 489
    Par défaut
    Salut

    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    long map(long x, long in_min, long in_max, long out_min, long out_max) {
          return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
        }

    ce qui donne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Function map(x,in_min,in_max,out_min,out_max : Longint) : Longint;
    Begin 
        Result :=  (x - in_min) * (out_max - out_min) div (in_max - in_min) + out_min;
    End;

  4. #4
    Membre confirmé
    Inscrit en
    Janvier 2004
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 68
    Par défaut
    Merci beaucoup à tous les deux, je regarde ça lundi

  5. #5
    Membre Expert

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2013
    Messages
    1 634
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2013
    Messages : 1 634
    Par défaut
    Bonjour,

    Pour donner un peu plus de sécurité, j'ajouterais deux tests :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    function map(x, xmin, xmax, ymin, ymax : Longint) : Longint;
    begin 
       if x <= xmin then exit(ymin);
       if x >= xmax then exit(ymax);
       Result :=  ((x - xmin) * (ymax - ymin) + (xmax - xmin) div 2) div (xmax - xmin) + ymin;
    end;
    D'une part, si xmin = xmax, on sort avant la division fatale par 0 avec une valeur relativement pertinente et, d'autre part, la sortie reste strictement dans [ymin..ymax] même si l'entrée x est hors jeu.

    J'ai ajouté un arrondi pour faire joli : (xmax - xmin) div 2.

    Salutations

Discussions similaires

  1. Fonction map explication
    Par nico38100 dans le forum Langage
    Réponses: 2
    Dernier message: 24/10/2012, 11h31
  2. Céer son widget, fonctions map, unmap, realize, etc..
    Par Gamall dans le forum GTK+ avec C & C++
    Réponses: 3
    Dernier message: 07/02/2011, 13h52
  3. Utilisation de la fonction map() ?
    Par Norore dans le forum Langage
    Réponses: 7
    Dernier message: 04/02/2011, 11h16
  4. fonction map pour ndarray
    Par vikki dans le forum Calcul scientifique
    Réponses: 3
    Dernier message: 24/01/2010, 13h15
  5. Explication de code avec la fonction map
    Par mlny84 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 31/10/2007, 13h59

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