begin process at 2012 05 28 21:48:05
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

OpenGL

 > 

comment savoire si un segment coupe un polygonne ou pas?


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

comment savoire si un segment coupe un polygonne ou pas?

mercredi 4 mai 2005 à 15:17:05 | comment savoire si un segment coupe un polygonne ou pas?

svirpiren

bonjour, j'aurai besoin de savoire comment es-ce que l'on peu faire pour savoire si un segment dont on connait les coordonnées passa au traver un quadrilatére dont on connait les coordonnées des sommet.
merci d'avance


pierre
mercredi 4 mai 2005 à 15:17:47 | Re : comment savoire si un segment coupe un polygonne ou pas?

svirpiren

a oui, j'oublié on est dans l'espace

pierre
mercredi 4 mai 2005 à 15:48:53 | Re : comment savoire si un segment coupe un polygonne ou pas?

Joky

Membre Club
Oula lol
Bé selon les mathématiques :)
Le segment à un vecteur directeur, si il est colinéaire à un des vecteur normal des plans définis par ton quadrilataire, il ne coupera pas le plan concerné...
Mais traduire ça en C++ :)
Bé euh il doit avoir plus simple j'présume

void Aurevoir( void ); //Bonne journée

mercredi 4 mai 2005 à 15:49:35 | Re : comment savoire si un segment coupe un polygonne ou pas?

Joky

Membre Club
Euh pardon, s'il est colinéaire au vecteur normal, il le coupe désolé

void Aurevoir( void ); //Bonne journée

mercredi 4 mai 2005 à 16:54:46 | Re : comment savoire si un segment coupe un polygonne ou pas?

Arnaud16022

Membre Club
ca c'était chez digiben du temps ou c'était pas payant :(
j'ai encore ses tutos qqpart sur le disque, donne moi ton mail et je t'envoie tt ca
++
ad


_______________________
Omnia vincit labor improbus
mercredi 4 mai 2005 à 19:31:51 | Re : comment savoire si un segment coupe un polygonne ou pas?

svirpiren

mon mail : seigneurvirpiren@msn.com (mercie)
 et pour la réponse avec le vecteur normal, c que mon but c d'empeché des objet de passer au travers de polygone dans l'espace, donc il fo que je sache si il coupe dans le polygone ou pas
mercie quand meme
+


pierre
mercredi 4 mai 2005 à 19:38:08 | Re : comment savoire si un segment coupe un polygonne ou pas?

Arnaud16022

Membre Club
voila
ou alors: coldet.dll, tres bien

_______________________
Omnia vincit labor improbus
mercredi 4 mai 2005 à 20:07:40 | Re : comment savoire si un segment coupe un polygonne ou pas?

KeniiyK

Membre Club
Réponse acceptée !

Tiens, je te poste ici une de mes fonctions pour savoir si il y a intersection, et ou... avec un triangle -> assez simple pour l'adapté au quad planaire...

Demi-droite : position (pos ) + une direction (dir) normalisée
Le triangle pt[3]

Le type CPoint3 represente un point ou un vecteur 3D....

bool CLASSE::Intersection(const CPoint3& pos,const CPoint3& dir,const CPoint3 pt[3])
{
 // normale du triangle
 CPoint3 normal=(pt[1]-pt[0])^(pt[2]-pt[0]); // produit vectoriel

 // si la direction est // a la face FALSE
 float dotProd2=normal*dir; // produit scalaire
 if(dotProd2==0.0f)
 {
  return false;
 }

 // calcul de la distance entre position et intersection
 float dotProd1=normal*pos;
 float d=-(normal*pt[0]);
 t=(-dotProd1-d)/(dotProd2);

 // calcul de l'intersection
 CPoint3 ptInters=pos+dir*t;

 // Si l'intersection est egale a un des points TRUE
 if(ptInters==pt[0] || ptInters==pt[1] || ptInters==pt[2])
 {
  return true;
 }

 CPoint3 vect1=pt[0]-ptInters;
 CPoint3 vect2=pt[1]-ptInters;
 CPoint3 vect3=pt[2]-ptInters;

 CPoint3 crossProd1=vect1^vect2;
 CPoint3 crossProd2=vect2^vect3;
 CPoint3 crossProd3=vect3^vect1;

 // Si l'intersection est sur une arete TRUE
 if(crossProd1.IsNull() && (vect1*vect2<0.0f))
 {
  return true;
 }
 if(crossProd2.IsNull() && (vect2*vect3<0.0f))
 {
  return true;
 }
 if(crossProd3.IsNull() && (vect3*vect1<0.0f))
 {
  return true;
 }

 // Si le point est hors du triangle FALSE
 if(crossProd1*crossProd2<=0.0f)
 {
  return false;
 }
 if(crossProd2*crossProd3<=0.0f)
 {
  return false;
 }

 // Si on arrive ici, l'intersection est dans le triangle TRUE
 return true;
}

KeniiyK

mercredi 4 mai 2005 à 20:12:14 | Re : comment savoire si un segment coupe un polygonne ou pas?

KeniiyK

Membre Club
Réponse acceptée !

Pardon, j'ai enleve d'autres test (relatif a mon prg) mais on peut rajouter le test suivant si on ne veut pas d'intersection "derriere" notre point etant donne la direction :
.
.
.
// calcul de la distance entre position et intersection
 float dotProd1=normal*pos;
 float d=-(normal*pt[0]);
 t=(-dotProd1-d)/(dotProd2);

if(t<0.0f) return false // pas d'intersection derriere
if(t<=0.0f) // pas d'intersection derriere ni egale a la position
.
.
.

KeniiyK

mercredi 4 mai 2005 à 21:06:30 | Re : comment savoire si un segment coupe un polygonne ou pas?

Arnaud16022

Membre Club
oui ca a l'air bon, plsu ou moins la meme chose que ce que j'ai mailé.
bonne suite
++
ad

_______________________
Omnia vincit labor improbus

1 2

Cette discussion est classée dans : connait, coupe, segment, savoire, polygonne


Répondre à ce message

Sujets en rapport avec ce message

Thread [ par Vince007 ] Bonjour, je vous laisse se message pour savoir si qqu'un qui connait bien les thread et les sémaphores sous Linux pourrait m'indiquer la méthode de co registres de segment... [ par SwordONe0v3riDe ] J'aimerai savoir si l'un de vous connais un site qui parle des registres tel qu'ils sont à l'heure actuelle parce que j'en ai marre de tomber sur des A l'aiiiiiiiiiiiiiiide [ par Mr.X ] J'aurais besoin de savoire si une commande en c++ permetrait de savoire les lettre dans un variable de type char et de pourvoir aussi les remplacer.ou Problème d'initialisation [ par briscard ] Bonjour à tous,j'ai un problème avec l'initialisation d'un charactère an C++ sous DEV C++:lorsque je fais:unsigned char *RECALL_SWEEPTRACE = new unsig ADO recordset [ par mortiis ] Bonjour à tousJe connait un peut ado, asser pour l'utiliser, mais je me pose une question.Quand on fait un select * from table;existe-t-il un moyen de Vous pouvez peut-êtres m'aider ? [ par keisuke ] Hi, Je voulais savoir si quelqu'un qui si connait en programmation C, pourrai m'envoyer son adresse Email, pour que je lui pose des question une fois Une personne connait cela ? [ par Jackboy ] Bonjour !Je travail sur un appli web sous l'OpenGIS MapServer, WMS (ASP client/server) et les metadata. Quelqu'un travail t'il sur des projets de ce g Problème avec allocation dynamique [ par luhtor ] Bon je planche deja depuis pas mal de temps sur un bout de code sans trop comprendre où est le problème. Alors j'espère que l'un d'entre vous pourrait ICDBurn graveur de cd [ par mortiis ] Bonjour à tousJe fait une application et j'aimerais qu'elle puisse faire des archives sur cd rom, alors il faut que je soit capable de programmer un g OUTLOOK [ par joh ] Lorsque j envoie le contenu de mon RichEdit dans OutLook ,il ne prend pas en compte le retourChariot ......Si quelqu'une connait un moyen pour qu il l


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,593 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales