Aire totale d'un nombre quelconque de carrés d'aire connue d

Réponses à toutes vos questions de la 2nde à la Terminale toutes séries
Wazulator
Messages: 7
Enregistré le: 27 Juin 2005, 16:29

Aire totale d'un nombre quelconque de carrés d'aire connue d

par Wazulator » 27 Juin 2005, 16:45

Salut !

C'est plus facile à comprendre qu'à expliquer, rassurez vous :p

En fait, j'essaye de calculer l'aire totale occupée par un nombre quelconque de carrés dont l'aire est connue mais dont la position est quelconque : ils peuvent s'intersecter, se juxtaposer ou être séparés.

Voici un exemple reprenant tous les cas de figure avec 6 carrés.

Image

L'aire à calculer est donc celle du (ou de la somme des) polygones résultants, comme indiqué sur cette figure :

Image

Merci d'avance !

Wazulator



quinto
Membre Irrationnel
Messages: 1108
Enregistré le: 01 Mai 2005, 12:00

par quinto » 27 Juin 2005, 17:41

Bonjour, tu as plusieurs possibilités, mais la plus simple est de découper la figure que tu obtiens en plusieurs rectangles disjoints et qui recouvrent ta figure.
L'aire totale sera la somme des aires.
A+

Wazulator
Messages: 7
Enregistré le: 27 Juin 2005, 16:29

par Wazulator » 27 Juin 2005, 18:40

Ah heu, j'ai oublié un petit détail, c'est que je ne peux pas le faire géométriquement vu que c'est destiné à être encodé (en PHP).

:D

Ca change un peu la donne...

Désolé de pas avoir été clair ^^

thomasg
Membre Relatif
Messages: 443
Enregistré le: 06 Mai 2005, 10:45

par thomasg » 27 Juin 2005, 22:18

Bonjour, je ne sais pas ce qu'est le PHP, mais la méthode proposée doit fonctionner, il suffit de choisir un repère, dont l'origine est par exemple un sommet d'un carré.
Si ce n'est pas possible, peux-tu préciser les contraintes, et l'énoncé.

Au revoir.

Wazulator
Messages: 7
Enregistré le: 27 Juin 2005, 16:29

par Wazulator » 28 Juin 2005, 14:51

PHP est un langage de programmation (orienté Internet pour l'histoire)

La méthode proposée est évidemment correcte mais comment réaliser ce découpage de façon algébrique ?

Merchi :)

PaTaPoOF
Membre Relatif
Messages: 202
Enregistré le: 01 Mai 2005, 10:32

par PaTaPoOF » 28 Juin 2005, 15:11

PHP te permet certes de créer des pages dynamiques comme c'est le cas pour ce forum mais ce n'est pas un langage orienté maths, je doute un peu que tu puisses créer un tel code avec !

Par contre, créer un repère pour la page est tout à fait possible, l'unité étant le pixel (je sais pas si on peut en prendre une autre par contre).
C'est ce qu'on fait par exemple en html pour donner une position fixe à un calque, l'origine était point en haut à gauche de la page (sous-attributs left et top de style mais tu dois le savoir je suppose)
Peut-être une piste : si les coordonnées de chaque sommet des carrés dans le repère (O,x,y) est connue (x désignant la valeur de "left" et y celle de "top"), ça doit être possible.

Au fait, tu parles de carrés mais tu as dessiné des rectangles !

Wazulator
Messages: 7
Enregistré le: 27 Juin 2005, 16:29

par Wazulator » 29 Juin 2005, 13:55

PHP est un langage de programmation à part entière, pas comme le HTML, et doit* permettre ce genre de calculs.

Créer le repère n'est pas le problème mais bien la surface occupée par les rectangles...

Enfin j'ai peut-êtreavancé dans le problème, je pense qu'il suffit de soustraire l'aire des carrés, d'additionner l'aire des intersections des carrés deux par deux, soustraire l'aire des intersections des carrés trois par trois, addictionner quatre par quatre ect... Mais je n'ai pas pu aller au delà de 4 carrés pour infirmer ou confirmer mon idée. Quelqu'un le saurait-il ?

Merci encore d'avance !

*Je dis doit parce que évidemment je n'y suis pas encore parvenu, mais vu qu'il permet tous genres de calculs (statistique, moyenne, probabilités) je ne vois pas pourquoi il ne le pourrait pas.

thomasg
Membre Relatif
Messages: 443
Enregistré le: 06 Mai 2005, 10:45

par thomasg » 29 Juin 2005, 14:26

Bonjour,

j'ai un peu de mal à te suivre lorsque tu parles de soustractions (pour avoir essayé cela me semble source d'erreur)

cependant, avec le problème tel que tu sembles l'avoir reposé (et e m'inspirant de ton raisonnement, je proposerai le calcul suivant (dans le cas de 6 rectangles):

aires de l'intersection des 6 rectangles + somme des aires des intersections de 5 rectangles + somme des aires des intersections de 4 rectangles + ... + plus sommes des aires appartenant à 1 seul rectangle.

En espérant t'avoir aidé.

A bientôt.

Wazulator
Messages: 7
Enregistré le: 27 Juin 2005, 16:29

par Wazulator » 29 Juin 2005, 18:21

Ben en fait non, ca ne marche pas...

En admettant que tu ais deux rectanges :
A ayant les angles aux points (0,0), (1,0), (1,1) et (0,1) donc d'aire 1
B ayant les angles aux points (0,0), (0.5,0), (0.5,1) et (0,1) donc d'aire 0.5

Donc un truc ainsi :
-------------------
|--------|--------|
|--------|--------|
|--------|--------|
|--------|--------|
|--------|--------|
|--------|--------|
-------------------

Son aire est donc de 1, l'aire de A, vu que B est inclus dans A...

Avec mon système : aireA + aireB - aireAuB ==> 1 + 0.5 - 0.5 = 1 OK !
Avec ton système : aireA + aireB + aireAuB ==> 1 + 0.5 + 0.5 = 2 Pas OK

Pour les exemples simples (jusqu'à quatre rectangles) mon système est correct, mais je n'ai pas pu tester plus loin :s

En tout cas merci de votre travail :)

thomasg
Membre Relatif
Messages: 443
Enregistré le: 06 Mai 2005, 10:45

par thomasg » 29 Juin 2005, 22:19

je maintiens ce que j'ai dit, tu as mal lu.

avec mon exemple: aire AinterB+ aire de A(privé de AinterB)=0,5+0,5=1 OK
(dans ce que j'ai écrit il m'a semblé que tu confondais réunion et intersection)

Au revoir

ALS
Membre Naturel
Messages: 14
Enregistré le: 08 Mai 2005, 18:02

par ALS » 30 Juin 2005, 09:17

A mon avis, il faut utiliser un algorithme de triangulation comme celui-ci pour calculer l'aire totale à partir des coordonnées des points:


/* triangulate.c

Triangulate a polygon via ear-clipping, and compute the area
of a polygon.

*/

/*

Permission is granted for use in non-commerical applications
provided this copyright notice remains intact and unchanged.

This program appears in my book:

"Programming Challenges: The Programming Contest Training Manual"
by Steven Skiena and Miguel Revilla, Springer-Verlag, New York 2003.

See our website http://www.programming-challenges.com for additional information.

This book can be ordered from Amazon.com at

http://www.amazon.com/exec/obidos/ASIN/0387001638/thealgorithmrepo/

*/


#include "bool.h"
#include "geometry.h"
#include


triangulate(polygon *p, triangulation *t)
{
int l[MAXPOLY], r[MAXPOLY]; /* left/right neighbor indices */
int i; /* counter */

for (i=0; in; i++) { /* initialization */
l[i] = ((i-1) + p->n) % p->n;
r[i] = ((i+1) + p->n) % p->n;
}

t->n = 0;
i = p->n-1;
while (t->n n-2)) {
i = r[i];
if (ear_Q(l[i],i,r[i],p)) {
add_triangle(t,l[i],i,r[i],p);
l[ r[i] ] = l[i];
r[ l[i] ] = r[i];
}
}
}

add_triangle(triangulation *t, int i, int j, int k, polygon *p)
{
int n; /* number of triangles in t */

n = t->n;

t->t[n][0] = i;
t->t[n][1] = j;
t->t[n][2] = k;

t->n = n + 1;
}

bool ear_Q(int i, int j, int k, polygon *p)
{
triangle t; /* coordinates for points i,j,k */
int m; /* counter */
bool cw();

copy_point(p->p[i],t[0]);
copy_point(p->p[j],t[1]);
copy_point(p->p[k],t[2]);

if (cw(t[0],t[1],t[2])) return(FALSE);

for (m=0; mn; m++) {
if ((m!=i) && (m!=j) && (m!=k))
if (point_in_triangle(p->p[m],t)) return(FALSE);
}

return(TRUE);
}


bool point_in_triangle(point p, triangle t)
{
int i; /* counter */
bool cw();

for (i=0; ip[t.t[i][0]],
p->p[t.t[i][1]], p->p[t.t[i][2]]);

return(total);
}

double area(polygon *p)
{
double total = 0.0; /* total area so far */
int i, j; /* counters */

for (i=0; in; i++) {
j = (i+1) % p->n;
total += (p->p[i][X]*p->p[j][Y]) - (p->p[j][X]*p->p[i][Y]);
}

return(total / 2.0);
}



main(){
polygon p; /* input polygon */
triangulation t; /* output triangulation */
int i; /* counter */
double area(), area_triangulate();

scanf("%d",&p.n);
for (i=0; in; i++) {
for (j=0; jt[i][j]);
/*
for (j=0; jt[i][j][X],t->t[i][j][Y]);
*/
printf("\n");
}
}

Wazulator
Messages: 7
Enregistré le: 27 Juin 2005, 16:29

par Wazulator » 30 Juin 2005, 15:13

thomasg --> Mais si tu fait aire AinterB+ aire de B(privé de AinterB) ca marche pas, alors dans un programme séquentiel, l'ordre ne doit pas avoir d'importance :s

ALS --> A mon avis je vais m'en inspirer, mais le C est quand même autrement complexe que le PHP (pointeurs, références, fonctions récursives et polymorphes...) je ne suis pas sur que ce sera possible :s

thomasg
Membre Relatif
Messages: 443
Enregistré le: 06 Mai 2005, 10:45

par thomasg » 30 Juin 2005, 21:24

1)Réponse à ton dernier message.
Si on reprend ce que j'ai donné hier à 14h26 en l'appliquant à ton exemple avec deux rectangles A et B

la formule que j'avais donnée avec 6 rectangles de départ devient:

aire de la surface incluse dans les deux rectangles + aire des surface incluse dans un seul rectangle=
aire de B + aire de A privé de B = 0,5+0,5=1

Remarque: je n'ai pas modifié mes réponses, j'ai juste essayé de les rendre un peu plus explicite.

2) Je réexplicite la formule proposée
Dans le cas de N rectangles, la formule à appliquer est donc:

aire de la surface incluse dans les N rectangles + aires des surfaces incluses dans (N-1) rectangles + ... + aires incluses dans un seul rectangle.

Remarque: chaqu'une de ces N aires à additionner sont elles mêmes décomposables en rectangles.

Voilà, amicalement, au plaisir de te lire.

hellta
Messages: 9
Enregistré le: 03 Juil 2005, 21:42

par hellta » 04 Juil 2005, 11:50

Salut ,
J'ai une proposition à te faire _un petit peu stupide _ pourquoi ne pas faire un encadrement qui comprendra le maximum_le cas ou ils seront tout à fait séparés_ et le minimum _le cas ou ils seront superposés :D

Wazulator
Messages: 7
Enregistré le: 27 Juin 2005, 16:29

par Wazulator » 05 Juil 2005, 10:56

J'ai fait autrement finalement.

Comme de toute façon il s'agit de calculer un pourcentage, pourcentage = approximation, donc je me suis pas pris la tête et j'ai directement approximé !

J'ai défini une matrice de 100x100 et par positions, je grise les cases occupées, et au final je les compte. Au pire je me goure de quelques % ce qui n'est pas fort grave comparé à la rapidité que ca prends !

Anonyme

par Anonyme » 16 Juil 2005, 15:57

Comme tu le dis : " ... j'essaye de calculer l'aire totale occupée par un nombre quelconque de carrés dont l'aire est connue mais dont la position est quelconque "

Problème de langue avant tout, la logique n'est pas présente que dans les mathématiques, elle l'est aussi dans l'expression ; nombre quelconque de carrés et position quelconque = 2 inconnues, si ni le nombre ni la position ne sont connues on ne peux pas obtenir de résultat, pour celà il faudrai que celà soit déterminé. Seule chose qui n'a pas de logique mais qui est juste, est que même un énoncé quelconque n'aboutira jamai à une réponse quelconque. Celà juste pour dire que la langue française n'est pas quelconque, elle est précise et se pose comme une équation.

 

Retourner vers ✎✎ Lycée

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 80 invités

Tu pars déja ?



Fais toi aider gratuitement sur Maths-forum !

Créé un compte en 1 minute et pose ta question dans le forum ;-)
Inscription gratuite

Identification

Pas encore inscrit ?

Ou identifiez-vous :

Inscription gratuite