Project

General

Profile

Évolution #738

Un système de Look Up Table

Added by dourouc05 over 9 years ago. Updated almost 9 years ago.

Status:
Nouveau
Priority:
Bas
Assignee:
-
Category:
Maths
Target version:
-
Start date:
05/30/2010
Due date:
% Done:

0%

Estimated time:

Description

Un système assez simple de LUT. Qu'est-ce que c'est que ce truc bizarre ? Une table de correspondance, une structure de données avec une entrée et une sortie. Ça sert quand on doit calculer assez souvent des valeurs (par exemple, une application a besoin assez souvent du sinus et du cosinus de 4,71 radians : elle le calcule une fois pour toute et enregistre les valeurs dans la LUT, elle pourra donc facilement aller les chercher plus tard sans devoir recalculer, d'où un gain de temps - mais c'est encore plus significatif avec des calculs plus longs. Quelque chose à base de QMap qui se remplisse dès la création avec des systèmes d'interpolation pour éviter de calculer toutes les valeurs intermédiaires (simple interpolation linéraire, ça devrait suffire dans un premier temps), un constructeur prenant la formule permettant d'obtenir chaque valeur et les quelques valeurs à calculer.

History

#1 Updated by yan over 9 years ago

Je ne pense pas que QMap soit une bonne idée. A ma connaissance, c'est toujours un vecteur que l'on utilise.
Par contre, je pense que cela est plus du même niveau qu'un conteneur que de math.

#2 Updated by LeGars over 9 years ago

Si je comprend bien, et attention je vais dire quelque chose d'horrible, c'est une sorte de tableau statique à chargement dynamique!

On aurait une initialisation de type :

// dans le main.cpp
QExtendLUT::load(fonctionTrigoComplexe());

// ailleurs
QExtendLUT::valueForX(4.5);

#3 Updated by dourouc05 over 9 years ago

C'est à peu près ça, sauf que tu lui dis quelles valeurs calculer dès l'initialisation (sans utiliser de méthode statique ou autre) :

LUT * lut = new LUT();
lut->setFct(f);
lut->setInterval(0, 1);
lut->setPrecision(0.1);
lut->interpolation(QEXTEND::LINEAR); // si on n'en met pas, pas d'interpolation possible, on renvoie le f(x) avec x le plus proche de celui demandé
lut->compute();
// ici, on calcule dix valeurs : f(0), f(0.1) ... f(1)

lut->get(0.1); // elle est dispo dans la lut, on la renvoie
lut->get(0.15); // on utilise une interpolation linéaire pour trouver 0.15 en fonction des valeurs stockées

Ça, c'est fait au pif, sans trop de réflexion, avec des noms de fonctions/constantes à repenser entièrement.

#4 Updated by yan almost 9 years ago

  • Priority changed from Normal to Bas

#5 Updated by yan almost 9 years ago

  • Target version deleted (Version 0.0.2)

Also available in: Atom PDF