bonjour a tous Alors voila, j'ai un point C qui se ballade entre A et B. Je connait sa valeur x. Comment puis je faire pour connaitre sa valeur y ? (il doit toujours se trouver sur le segment AB j'ai essayé ca : int a,b; if(XC>XA && XC<XB) { a= (YA-YB)/(XA-XB); b= YA-a*XA; YC= (a*XC)+b; } mais ca marche pas, en gros YC est toujours egal a YA :/ quelqu'un a une idée ???? merci d'avance |
Si tu connais ya0 et yb0 et xab alors tu as ton equation qui dit que: y = (xab /yb0) * x + ya0 ? la Nature nous montre seulement la queue du lion. Mais je suis certain que le lion a qui elle appartient pense qu'il ne peut pas se révéler en une fois en raison de son immense taille. - Fondateur de Ti-Gen -: http://www.tigen.org - Membre du Groupe Orage Studio -: http://oragestudio.free.fr/ - Mon site perso -: http://tisofts.free.fr Projets TI68K en cours: GFA-Basic = http://www.tigen.org/gfabasic Arkanoid. PolySn |
non, le problème c'est que a est entier , et que la fraction a= (YA-YB)/(XA-XB); est probablement inférieure à 1, ce qui fait que c'est arrondi à zéro. et YC=YA Si tu veux que ça marche il y a deux solutions: 1 - soit déclarer a en float 2 - soit faire la multiplication avant la division pour ne jamais obtenir une division qui donne un truc plus petit que 1, en remplaçant a dans ton équation: b= YA-((YA-YB)*XA)/(XA-XB); YC= ( (YA-YB)*XC)/(XA-XB)+b; et ça devrait le faire Nspire wiki CONDUCTEUR Va-et-vient Des QUATRE MANCHE AVEC DES DIODES |
C'est bien compliqué tout ça pour une simple interpolation linéaire YC = YA + [(YB - YA) * (XC - XA) / (XB - XA)] Et hop, pas de problème d'arrondi (attention à ne pas dépasser le minimum/maximum si c'est des entiers, par contre). Dans les cas où on peut choisir la valeur de (XB - XA), une astuce est de le prendre égal à 2n (avec n entier positif), comme ça la division est remplaçable par un décalage de bits « Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau |
Merci tout le monde J'opte pour le calcul de zerosquare, qui fonctionne parfaitement pour ce que je fais |