sa à l'aire d'aller un peut mieux apparement.
dis moi, alros b c'est l'absolu ou pas ?
sa à l'aire d'aller un peut mieux apparement.
dis moi, alros b c'est l'absolu ou pas ?
surtout en mathematique ne joue jamais avec les signes.
Garde les comme ils ont, donc pas d'absolu.
N'oublie pas de verifier que le point X (coord.) de la souris est compris entre X1 et X2 et que le y de la souris est compris entre Y1 et Y2.
AUSSI.
nt SurLigne(float vX, float vY, float vX1, float vY1, float vX2, float vY2)
{
float a; // pente
float b; // constante
float x;
float y;
// calcule de a et b
!!!!!!!!!!!!! if (y1!=y2)
a=(vX2-vX1)/(vY2-vY1); ////IL FAUT UN IF AVANT CETTE LIGNE
b=vY1-(a*vX1);
x=vX;
y=(a*x)+b;
printf ("Variables :\n");
printf (" ligne de %f|%f à %f|%f\n", vX1, vY1, vX2, vY2);
printf (" curseur %f|%f\n", vX, vY);
printf (" a=%f\n"
" b=%f\n",
a, b);
printf (" x=%f\n"
" y=%f\n",
..........
Si tu as encore des questions je te repondrais demain.Salut
ok ok.
Merci beaucoup, sa faisais longtemps que je sèchais la dessus avant de poster ce message dans se forum.
sans toi j'y serais jamais arrivé.
Vraiement merci.
Non, vraiment je crois qu'il n'est pas nécessaire de calculer l'équation de la droite.
Prenons A(10,11), B(20,21), C(30,31)
Prenons le produit scalaire de deux des vecteurs
AB.AC = ((20-10)*(30-10))+((21-11)*(31-11)) = 400
(J'ai pris le produit scalaire canonique de R²)
norme(AB).norme(AC) = racine((20-10)² + (21-11)²).racine((30-10)² + (31-11)²) = racine(200).racine(800) = 400
Les trois points sont donc bien alignés.
Cela repose sur le fait que le projection du point intermediaire sur la droite engendrée par les deux autres est le point intermedaire lui même.
Cordialement,
Ol'
sa m'interesse, car l'autre n'est pas très précise pour les lignes prèsques plattes.
je suis pas très doué en math et je connais pas vraiement ce sujet la,
a quoi correspond la "norme" ?
et, les différants calcules séparré par des "." comment dois-je les interpréter ?
c'est quoi un produit scalaire ?
hooo, jusque la j'arrive, j'ai AB.AC, AB et AC qui valent respectivement 400, 200 et 800.
et la, on fais racine carré de AB fois la racine carré de AC et sa donne 400, donc correcte, c'est bien juste ?
c'est bon j'y suis arrivé tout seul.
Cette formule est beaucoup mieux que l'autre, elle permet d'etre beaucoup plus précis que l'autre surtout pour les lignes prèsque verticales ou horizontales.
Merci beaucoup Ol' pour ta formule.
Il vaudrait mieux faire (si tu veux etre pile pour le pixel) :Envoyé par the.cable.guy
carre(AB.AC)==norm(AB)*norm(AC) => 400*400=200*800 !
Dans ce cas toujours pas de flottants
1)Avant de poster, merci de lire les règles. 2)Utiliser [code] [/code] pour quoter le code ! 3)Conseils pour le forum C [a lire en entier!]
ok.
se qui est domage c'est qu'après la différance entre les 2 valeurs est très grande, tandis qu'avec l'autre methode, ou on faisais la racine, la différance étais quasiment de 0 quand on étais sur la ligne, pour le programme c'est plus simple gèrer une valeur près de zéro plutot qu'une grande valeur, je trouve.
L'autre methode me va, merci quand même.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager