Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1294 connectés 

  FORUM HardWare.fr
  Programmation
  Algo

  appartenance d'un triangle à un rectangle [clipping]

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

appartenance d'un triangle à un rectangle [clipping]

n°882921
yo c spi
Yo !
Posté le 26-10-2004 à 11:28:42  profilanswer
 

Salut, je travaille nen ce moment sur des algos 2D et j'ai un problème sur le "Hidden Surface Removal".
J'utilise l'algorithme de Warnock dont voici l'algo :  

Code :
  1. Warnock(Liste_Poly, R)
  2. Liste_Poly : liste de polygones
  3. R : Region de l'image
  4. si (Liste_poly a 0 polygone dans la region courante alors
  5.     afficher(couleur_fond)    // ou ne rien afficher
  6. si (Liste_Ploy a un seul polygone dans la region ou un polygone devant les autres) alors
  7.     afficher(polygone)
  8. sinon
  9.     diviser region en r1, r2, r3 et r4
  10.     Warnock(Liste_Poly, r1)
  11.     Warnock(Liste_Poly, r2)
  12.     Warnock(Liste_Poly, r3)
  13.     Warnock(Liste_Poly, r4)
  14. finsi


Dans mon algorithme, je prends des triangles comme polygones uniquement.
Mais je ne sais pas comment tester si un triangle a des points dans une région ou pas (la région étant un rectangle).
Par contre, j'ai de fortes contraintes pour cet algo (c'est du développement sur téléphone portable) :
- Il faut que mes algo utilisent unquement des entiers
- Les performances de l'algo doivent etre optimales.
Donc je ne put pas tester l'appartenance de chaque point du triangle, ni en définir les équation de droite des cotés (ce ne sont pas des entiers).


Message édité par yo c spi le 02-11-2004 à 14:10:54

---------------
J.C. Farinet
mood
Publicité
Posté le 26-10-2004 à 11:28:42  profilanswer
 

n°884252
matafan
Posté le 27-10-2004 à 19:02:42  profilanswer
 

Ben ton triangle est entierement dans ton rectangle ssi les trois points sont dans le rectangle :heink:

n°884359
WhatDe
Posté le 27-10-2004 à 20:34:38  profilanswer
 

matafan a écrit :

Ben ton triangle est entierement dans ton rectangle ssi les trois points sont dans le rectangle :heink:


 
http://www.ellatilgenkamp.nl/images/opticien.jpg

n°885150
yo c spi
Yo !
Posté le 28-10-2004 à 17:51:47  profilanswer
 

matafan a écrit :

Ben ton triangle est entierement dans ton rectangle ssi les trois points sont dans le rectangle :heink:

Je ne veut pas tester si le triangle est entièrement dedans mais si il y a une partie de ce triangle dans le rectangle, dans tous les cas de figures (que le triangle soit entièrement dedans, qu'il contienne quelques point ou meme si le triangle contient le rectangle).


---------------
J.C. Farinet
n°885215
Lam's
Profil: bas.
Posté le 28-10-2004 à 18:55:18  profilanswer
 

Point point1, point2, point3;
if (point1.y>point2.y) alors swap(point1,point2);
if (point2.y>point3.y) alors swap(point2,point3);
if (point1.y>point2.y) alors swap(point1,point2);
bool ok = not ( (point1.y<0 && point3.y<0) || (point1.y>maxY && point3.y>maxY));
 
A partir de là, tu fais ton occlusion classique.  
 
Si tu n'as pas besoin de les afficher toi-même, alors teste que tous les points ne sont pas sous 0 ou au dessus de maxX.
 
Si à tout hasard maxX est une puissance de 2 et que ton processeur est en complément à 2, alors  
ça s'optimise avec un ou logique sur le bit immédiatement au dessus de la taille max.


Message édité par Lam's le 28-10-2004 à 18:56:16
n°887970
yo c spi
Yo !
Posté le 01-11-2004 à 20:11:27  profilanswer
 

L'algo que j'ai décrit plus haut n'est pas bon. Apres un peu de réflexion, on voit qu'il ne marche pas.
J'ai trouvé le vrai algo de Warnock, les cas dépendent selon si le polygone fait une intersection evc le rectangle, le contient ou est contenu.
Une vrai description de l'algo ici :
http://www.inrialpes.fr/movi/peopl [...] ise/c6.pdf
http://www.evl.uic.edu/aej/488/lecture10.html


Message édité par yo c spi le 01-11-2004 à 20:17:29

---------------
J.C. Farinet
n°888245
Moktar1er
No one replies...
Posté le 02-11-2004 à 09:19:41  profilanswer
 

ya des bon algos de "clipping"... faudrait que je les retrouve

n°888521
yo c spi
Yo !
Posté le 02-11-2004 à 14:04:52  profilanswer
 

moktar1er a écrit :

ya des bon algos de "clipping"... faudrait que je les retrouve

Oui, il y a aussi :
- l'algorithme du peintre (tous dessiner en partant du plan le plus profond), trop long pour une aplli sur un mobile (la méthode pour dessiner un pixel est gourmande).
- le Z-buffer mais gourmand en mémoire.
- les BSP-Trees, mais qui ne servent que si on a un mouvement de caméra.
Il y en a d'autres mais pour la 3D, pour savoir quelles faces afficher sur des polygones.
 
Mais si tu as d'autres algos à me proposer, je suis preneur.


Message édité par yo c spi le 02-11-2004 à 14:05:34

---------------
J.C. Farinet
n°888534
Moktar1er
No one replies...
Posté le 02-11-2004 à 14:23:47  profilanswer
 

Cohen-Sutherland ou Sutherland-Hodgeman pour du fenêtre rectangulaire
sinon Cyrus-Beck pour du fenêtrage à polygone convexe

n°888541
chrisbk
-
Posté le 02-11-2004 à 14:26:54  profilanswer
 

Cohen-sutherland, c'est du solide, de l'eprouvé, de l'efficace
 
j'l'avais utiliser du tps ou je faisais du SVG en java sur PDA (bonjour les perfos) et j'avais pas eu a m'en plaindre. Par contre, je sais pu si j'etais passé en virgule fixe pour cette partie ou pas. Je pourrais regarder ce soir si tu veux


---------------
NP: HTTP Error 764 Stupid coder found
mood
Publicité
Posté le 02-11-2004 à 14:26:54  profilanswer
 

n°888675
yo c spi
Yo !
Posté le 02-11-2004 à 17:05:03  profilanswer
 

J'ai trouvé un algo (http://www.cc.gatech.edu/grads/h/H [...] code1.html), mais il se sert de 2 nombres réels a un moment.
Merci beaucoup néanmoins, je vais continuer mes recherches.


---------------
J.C. Farinet
n°889853
chrisbk
-
Posté le 03-11-2004 à 21:34:53  profilanswer
 

Bon mon cohen-suther truc etait bien en java, 100%entier, virgule fixe (16:16). Par contre fallait caster en long avant la div, sinon ca faisait overflow et ca rendait ca :
 
http://chrisbk.site.voila.fr/pica.jpg
 
pour une clipping sur un edge horizontal, par exemple, j'avais ca: (m_iVal etant l'ordonnée de l'axe)
 

Code :
  1. long tmp =  ((long)(m_iVal - start.y) * (long)(end.x - start.x)) / (long)(end.y - start.y);
  2.  res.x = (int)tmp + start.x;


 
end.x & cie etant des entier en virgule fixe

n°976627
yo c spi
Yo !
Posté le 09-02-2005 à 15:57:38  profilanswer
 

J'ai ceci comme algorithme de détection d'intersection d'un triangle et d'un rectangle :  
FP.intersects(xa1, ya1, xa2, ya2, xb1, yb1, xb2, yb2) rend vrai si les segments a1-a2 et b1-b2 font une intersection.
t.a référence le point a du triangle, t.a.x son abscisse ....
x, y, width et height sont respectivement l'abscisse du rectangle, son ordonnée, sa largeur et sa hauteur.

Code :
  1. FP.intersects(t.a.x, t.a.y, t.b.x, t.b.y, x,       y,        x+width, y) ||
  2. FP.intersects(t.a.x, t.a.y, t.b.x, t.b.y, x,       y,        x,       y+height) ||
  3. FP.intersects(t.a.x, t.a.y, t.b.x, t.b.y, x+width, y,        x+width, y+height) ||
  4. FP.intersects(t.a.x, t.a.y, t.b.x, t.b.y, x,       y+height, x+width, y+height) ||
  5. FP.intersects(t.a.x, t.a.y, t.c.x, t.c.y, x,       y,        x+width, y) ||
  6. FP.intersects(t.a.x, t.a.y, t.c.x, t.c.y, x,       y,        x,       y+height) ||
  7. FP.intersects(t.a.x, t.a.y, t.c.x, t.c.y, x+width, y,        x+width, y+height) ||
  8. FP.intersects(t.a.x, t.a.y, t.c.x, t.c.y, x,       y+height, x+width, y+height) ||
  9.     
  10. FP.intersects(t.c.x, t.c.y, t.b.x, t.b.y, x,       y,        x+width, y) ||
  11. FP.intersects(t.c.x, t.c.y, t.b.x, t.b.y, x,       y,        x,       y+height) ||
  12. FP.intersects(t.c.x, t.c.y, t.b.x, t.b.y, x+width, y,        x+width, y+height) ||
  13. FP.intersects(t.c.x, t.c.y, t.b.x, t.b.y, x,       y+height, x+width, y+height);


En gros : un triangle et un rectangle font une intersection si un des cotés du triangle fait une intersection avec un des cotés du rectangle.
 
Seulement voila, le code de cet algo qui me semble juste (j'ai surement tort) ne fonctionne pas, alors que le raisonnemnt ci dessus me semble très correct


---------------
J.C. Farinet
n°983655
yo c spi
Yo !
Posté le 16-02-2005 à 15:37:21  profilanswer
 

:bounce:


---------------
J.C. Farinet
n°983701
psychatric​meuh
Empty Walls
Posté le 16-02-2005 à 16:38:49  profilanswer
 

je n'ia aps de solution a ton problème, mais juste que si le triangle contient le rectangle comme dis dans les premiers posts, aucun coté est en intersection avec d'autres.... :heink:  
donc ton raisonnement en bon mais qu'en partie....


Message édité par psychatricmeuh le 16-02-2005 à 16:39:24
n°983719
yo c spi
Yo !
Posté le 16-02-2005 à 16:52:10  profilanswer
 

J'aurai du dire, mais ce n'est plus la meme question. C'est dans le meme cadre mais pour ce dernier pôst, je cherche juste si un triangle et un rectangle font une intersection.


---------------
J.C. Farinet
n°983794
psychatric​meuh
Empty Walls
Posté le 16-02-2005 à 17:29:33  profilanswer
 

ah désolée alors .......


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Algo

  appartenance d'un triangle à un rectangle [clipping]

 

Sujets relatifs
[VB6] Clipping de la souris a une form (restriction de mouvemnts)Comment tester l appartenance d une variable a un type ??
Algorithme de collision entre un point et un rectangle.[Math] calcul du cercle circonscrit a un triangle en 3D
[JS] Position relative de la souris par rapport a un rectangle ???[OpenGL] trou dans un rectangle
3D : Savoir si un point appartient a un triangle. [probleme d'algo][php] faire des rectangle cercle ...
[Math] Comment savoir si un point se trouve dans un triangle?[Java] Comment empêcher la souris de sortir d'une zone (clipping)?
Plus de sujets relatifs à : appartenance d'un triangle à un rectangle [clipping]


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR