Bonjours

Je dois programmer un projet de clipping paramétrique 2D et remplissage de polygone.

Je tente de calculer le point d'intersection entre 2 droites,je pense y être arrivé mais j'ai un problème technique

Voici déja mes programmes

PointPoly est un maillon de la liste chainé du polygone,elle est composé de 3 variables : x,y,et un pointeur sur le point suivant.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
void Intersection(PointPoly* p1,PointPoly* p2,PointPoly* a,PointPoly* b){
    double c,d,e,t;
    double arg1=0,arg2=0;
    Point inter;
    double result1,result4;
    if (a->x==b->x){
        std::cout << "( " << a->x << " - " << p1-> x << ") / ( " << p2->x << " - " << p1->x << " ) - ( " << b->x << " - " << a->x << ") " << std::endl;
        c= (a->x-p1->x);
        d= (p2->x-p1->x);
        e= (b->x-a->x);
        t= c/(d-e);
        /*std::cout << " c = " << c <<std::endl;
        std::cout << " d = " << d << std::endl;
        std::cout << " e = " << e << std::endl;
        std::cout << "t = " << t << std::endl;*/
        result1 = p1->x +((p2->x-p1->x)*t);
        result4= p1->y+ ((p2->y-p1->y)*t);
        /*std::cout << " result1 = " << result1 << std::endl;
        std::cout << "result 4 = " << result4 << std::endl;*/
    }
    else{
        arg1=coefa(p1,p2);
        std::cout << " arg1 = " << arg1 << std::cout;
        std::cout << coefb(a,b) << " - " << coefb(p1,p2) << "/" << coefa(p1,p2) << std::endl;
        result1=(coefb(a,b)-coefb(p1,p2))/(coefa(p1,p2)-coefa(a,b));
        result4=coefa(p1,p2)*result1+coefb(p1,p2);
        std::cout << " result1 = " << result1 << std::endl;
        std::cout << "result 4 = " << result4 << std::endl;
 
    }
}
 
double coefa(PointPoly* p1,PointPoly* p2){
 
    return (p1->y-p2->y)/(p1->x-p2->x);
}
 
double coefb(PointPoly* p1,PointPoly* p2){
 
    return (p1->y-(p1->y-p2->y)*p1->x/(p1->x-p2->x));
}
Le problème se situe à cette ligne

result1=(coefb(a,b)-coefb(p1,p2))/(coefa(p1,p2)-coefa(a,b));

En effet le 3ème facteur ne me renvoit pas exactement la bonne valeur..

par exemple : exemple : (100+126/1) = 226 et (100+126/1,09095833) = 205 (bon résultat)

Il devrait donc me renvoyer 1,09095.. au lieu de 1.

Merci beaucoup