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

  FORUM HardWare.fr
  Programmation
  Algo

  [casse tête mathématique]

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[casse tête mathématique]

n°360739
k666
dites non à petitmou
Posté le 14-04-2003 à 18:04:46  profilanswer
 

hello les gars, j'ai un casse tête mathématique,
il faut quej e calcule l'aire commune entre deux rectangles, et j'ai:
 
Rectangle A:
 
Xamin
Xamax
Yamin
Yamax
 
 
Rectangle B:
 
Xbmin
Xbmax
Ybmin
Ybmax
 
 
 
j'ai besoin d'une toute petit eligne de calcul qui me sorte l'aire commune entre les deux rectangles !!! mais j'ya arrive po ça fait une demie journée que je cherche mais j'ya arrive po :( à l'aide !!!!!!!!! :'( :'( pitié de mon ignorance et mon illogicité...

mood
Publicité
Posté le 14-04-2003 à 18:04:46  profilanswer
 

n°360750
theShockWa​ve
I work at a firm named Koslow
Posté le 14-04-2003 à 18:10:08  profilanswer
 

ca doit pas se faire en une seule ligne ... Ou alors je ne vois pas la bonne approche du problème ... Je cherche ...

n°360756
k666
dites non à petitmou
Posté le 14-04-2003 à 18:14:30  profilanswer
 

ce que j'ai pondu et qui marche pas c'est ça:
 


 
var boxminx = Math.max(minax,minbx);
var boxmaxx = Math.min(maxax,maxbx);
var boxminy = Math.max(minay,minby);
var boxmaxy = Math.max(maxay,maxby);
 
var commonarea = (Math.abs(boxmaxx-boxminx)*Math.abs(boxmaxy-boxminy));
 
 

n°360761
kaloskagat​os
Posté le 14-04-2003 à 18:29:40  profilanswer
 

--------------------
 
var boxminx = Math.max(minax,minbx);
var boxmaxx = Math.min(maxax,maxbx);
var boxminy = Math.max(minay,minby);
var boxmaxy = Math.min(maxay,maxby);
 
var commonarea = (Math.abs(boxmaxx-boxminx)*Math.abs(boxmaxy-boxminy));
 
--------------------
 
 
tu t'es pas trompé pour boxmaxy? moi je verrais plutot un min


Message édité par kaloskagatos le 14-04-2003 à 18:30:30
n°360764
k666
dites non à petitmou
Posté le 14-04-2003 à 18:32:43  profilanswer
 

yes en effet il ya une condition comme celle ci à vérifier, cas contraire l'aire commune est donc 0, mais j'essaye de trouver une manière courte et élégante en mathématiques qui me résolve mon problème mais j'y arrive po :'(
je vais essye en mettant un min au lieu du max :)

n°360765
theShockWa​ve
I work at a firm named Koslow
Posté le 14-04-2003 à 18:35:55  profilanswer
 

à part faire un joli paquet de if / else je ne vois pas trop comment faire pour tester si un point d'un rectangle appartient à l'autre ...

n°360766
nraynaud
lol
Posté le 14-04-2003 à 18:37:28  profilanswer
 

kaloskagatos a écrit :

--------------------
 
var boxminx = Math.max(minax,minbx);
var boxmaxx = Math.min(maxax,maxbx);
var boxminy = Math.max(minay,minby);
var boxmaxy = Math.min(maxay,maxby);
 
var commonarea = (Math.abs(boxmaxx-boxminx)*Math.abs(boxmaxy-boxminy));
 
--------------------
 
 
tu t'es pas trompé pour boxmaxy? moi je verrais plutot un min


 
et après tu vérifie que le signe de tes soustractions est bon (les 2 doivent être positif en la faisant dans le bon sens).
tu vires tes abs() aussi.
 
Si un des signes est négatifs, tu mesures l'aire qui n'est pas comprise entre les 2 (il n'y a pas intersection)

n°360767
kaloskagat​os
Posté le 14-04-2003 à 18:40:02  profilanswer
 


 
 Xam               XaM
  __________________   Yam          
 |                  |  
 |        Xbm       |            XbM
 |          ________|____________
 |      Ybm|////////|            |
 |_________|////////|  YaM       |
           |                     |
           |                     |
           |                     |
        YbM|_____________________|
 


:D


---------------
« Le hasard, c’est différent de la chance. Parce que la chance, je n'en ai jamais. »
n°360768
theShockWa​ve
I work at a firm named Koslow
Posté le 14-04-2003 à 18:42:22  profilanswer
 

kaloskagatos a écrit :


 
 Xam               XaM
  __________________   Yam          
 |                  |  
 |        Xbm       |            XbM
 |          ________|____________
 |      Ybm|////////|            |
 |_________|////////|  YaM       |
           |                     |
           |                     |
           |                     |
        YbM|_____________________|
 


:D


 
[:roxelay]
 
J'ai fait Exactement le même schéma sur ma feuille de papier devant mon PC ! :D


Message édité par theShockWave le 14-04-2003 à 18:52:56
n°360788
k666
dites non à petitmou
Posté le 14-04-2003 à 19:02:12  profilanswer
 

bon bin merci à vous tous de m'avoir encouragé à trouver la réponse qui cassait la tête de tout le monde ici :)
 
 
la solution est:
 
 
 
(pour avoir un quotient d'au moins "this.fitarea" )
 


 
    if ( (szmaxx < ezminx) || (szmaxy < ezminy) || (szminx > ezmaxx) || (szminy > ezmaxy) )
    {
     return false;
    }
    else
    {
     var boxminx = Math.max(szminx,ezminx);
     var boxmaxx = Math.min(szmaxx,ezmaxx);
     var boxminy = Math.max(szminy,ezminy);
     var boxmaxy = Math.min(szmaxy,ezmaxy);
     var totalarea = sz.defw * sz.defh;
     var commonarea = (Math.abs(boxmaxx-boxminx)*Math.abs(boxmaxy-boxminy));
     //alert(commonarea + " : " + totalarea);
     if (commonarea >= totalarea*this.fitarea)
     {
      return true;
     }
     else
     {
      return false;
     }
    }
 
 


 
 
merci messieurs :)

mood
Publicité
Posté le 14-04-2003 à 19:02:12  profilanswer
 

n°369321
theShockWa​ve
I work at a firm named Koslow
Posté le 23-04-2003 à 11:56:01  profilanswer
 

Je trouve que cette solution est un peu plus élégante (attention, je n'ai pas dit forcément plus performante ou autre ...)
 


 
  var boxminx = Math.max(szminx,ezminx);
  var boxmaxx = Math.min(szmaxx,ezmaxx);
  var boxminy = Math.max(szminy,ezminy);
  var boxmaxy = Math.min(szmaxy,ezmaxy);
 
  if(((boxmaxx-boxminx)<=0) || ((boxmaxy-boxminy)<=0)) {
    return false;
  }
 
  var totalarea = sz.defw * sz.defh;
  var commonarea = (boxmaxx-boxminx)*(boxmaxy-boxminy));
  //alert(commonarea + " : " + totalarea);
  if (commonarea >= totalarea*this.fitarea)
  {
    return true;
  }
  else
  {
    return false;
  }
 


 
Edit : ca te permet aussi de virer les Math.abs ...


Message édité par theShockWave le 23-04-2003 à 11:59:21

---------------
last.fm
n°370062
Dag elg
Posté le 24-04-2003 à 00:48:52  profilanswer
 

S = max(0,min(Xamax,Xbmax)-max(Xamin,Xbmin))*
    max(0,min(Yamax,Ybmax)-max(Yamin,Ybmin))


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

  [casse tête mathématique]

 

Sujets relatifs
Librairie mathématique[DEBAT] JS> Se prendre la tête pour 10% de butés ?
casse brique...[Apache & PHP] Probleme de 'casse' avec mod_rewrite
Problème d'en-tête avec la fonction mail()evaluer une fonction mathematique
[postgreSQL] Recherche sans casse[Perl] Comment ignorer la casse dans une comparaison ?
Certains Webmasters ont la tête dans les nuages... Faille inside[HTML] Les cadres c'est prise de tête sniff ... need help svp :(
Plus de sujets relatifs à : [casse tête mathématique]


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)