2010-08-04 4 views
-2

Je dois implémenter un petit contrôle graphique multimage, qui est essentiellement un tableau de 9 images, montré un par un. Le but final est d'agir comme minislider.Tables de correspondance en C++

Maintenant, ce contrôle graphique va recevoir différentes gammes entier: de 5 à 25 ou de 0 à 7 ou de -9 à 9.

Si je vais utiliser proportion - « règle de trois » J'ai peur n'est pas techniquement suistainable parce que cela peut être une source d'erreurs. Ma conjecture est d'utiliser quelques tables de recherche, mais a quelqu'un un bon conseil pour l'approche?

Thnx

+0

Pourquoi pensez-vous avoir besoin d'une table de correspondance? Pourquoi ne pas simplement calculer l'indice à partir de la plage et de la valeur actuelle? –

+0

Le mini-curseur se compose de 9 images dont les images doivent changer lorsque la valeur augmente ou diminue. En effet, l'imageId est un index en croissance. Mais la plage d'entrée de l'autre module peut être de 5 à 25, ou de 0 à 7. À première vue, je voulais utiliser la règle de trois, mais ce n'est pas correct, et le choix semble être les tables de recherche. – garzanti

+0

Juste pour clarifier ce que j'ai compris: On vous donne un ensemble d'images qui doivent être affichées séquentiellement (potentiellement dans les deux directions, mais pas de sauts). Vous avez également une plage d'entiers qui n'ont pas besoin de commencer par 0 et dont la plage peut être supérieure à 9. Comment les entiers sont-ils liés aux images? Qu'est-ce que vous appelez la «règle des trois» qui n'est pas une solution? –

Répondre

1

Je ne regarde que les tables sont nécessaires. Vous pouvez obtenir de votre valeur d'entrée à un indice d'image entre 0 et 9 proportionnellement:

int ConvertToImageArrayIndex(int inputValue) 
{ 
    int maxInputFromOtherModule = 25; 
    int minInputFromOtherModule = 5; 


    // +1 required so include both min and max input values in possible range. 
    // + 0.5 required so that round to the nearest image instead of always rounding down. 
    // 8.0 required to get to an output range of 9 possible indexes [0..8] 

    int imageIndex = ((float)((inputValue-minInputFromOtherModule) * 8.0)/(float)(maxInputFromOtherModule - minInputFromOtherModule + 1)) + 0.5; 

    return imageIndex; 
} 
+0

Oui ... vous avez raison. Au départ, j'avais aussi pensé à cette approche, mais j'étais à la recherche d'erreurs qui pourraient provenir de l'arrondissement des résultats. – garzanti

0

oui, une table de consultation est une bonne solution

int lookup[9] = {5, 25, ... the other values }; 
int id1 = floor(slider); 
int id2 = id1+1; 
int texId1 = lookup[id1]; 
int texId2 = lookup[id2]; 
interpolate(texId1, texId2, slider - float(id1)); 
+0

.. mais après avoir relu votre question je ne suis plus sûr que c'est ce que vous voulez – Calvin1602

Questions connexes