Vérifier qu'un point est dans un polygone

Réponses à toutes vos questions après le Bac (Fac, Prépa, etc.)
Dlzlogic
Membre Transcendant
Messages: 5273
Enregistré le: 14 Avr 2009, 13:39

par Dlzlogic » 21 Juil 2012, 21:40

Skullkid a écrit:Mes sarcasmes portent sur la description fausse que tu fais de ton propre code. Peu importe que ce ne soit pas toi qui l'aies écrit à la base, tu prétends savoir comment il fonctionne, et on se rend compte que non, quelle surprise ! Ça n'a évidemment rien à voir avec la date de dernière modification, mais bon on a l'habitude de tes réparties idiotes et désespérées...

Je pense que là tu as montré ta vraie personnalité.
Si tu crois que c'est pas moi qui l'ai écrit, c'est ton problème.
Que tu doutes de ce que je dis c'est le mien. Donc je t'accuse officiellement de calomnie et je demande à la modération d'en prendre acte.



Skullkid
Habitué(e)
Messages: 3075
Enregistré le: 08 Aoû 2007, 20:08

par Skullkid » 21 Juil 2012, 22:26

Dlzlogic a écrit:Que tu doutes de ce que je dis c'est le mien. Donc je t'accuse officiellement de calomnie et je demande à la modération d'en prendre acte.


Woah :D

Au temps pour moi, j'avais mal compris cette phrase, je pensais que tu parlais du test d'intériorité du point au polygone.

Dlzlogic a écrit:Le test que j'ai donné, c'est pas moi qui l'ai fait.


Quoi qu'il en soit, que tu l'aies écrit ou non, ça ne m'importe pas, comme je l'ai déjà dit. Mais bon je serais ravi d'être banni pour calomnie, ça rajoutera du crédit à mon petit côté rebelle. J'ai plus qu'à mettre un avatar osé et nul doute que je deviendrai une terreur du ouaibe !

Dlzlogic
Membre Transcendant
Messages: 5273
Enregistré le: 14 Avr 2009, 13:39

par Dlzlogic » 21 Juil 2012, 23:28

Bonsoir,
Ce que Skullkid et Fatal_error ignorent, c'est que quand on a un problème à résoudre en informatique, on y passe des jours, voire des semaines. On essaye toutes sortes de solutions. Quand la bonne méthode est trouvée, on a généralement pris soin de prendre de notes, commentaires dans le source, puis étant donné le nombre de solutions qu'on a essayé, on oublie celle qui est adoptée, c'est à dire celle qui produit le résultat recherché.
Etant donne le millions de lignes d'un source, il me parait compréhensible qu'au bout de nombreuses années, on puisse oublier les détails et en particulier, la méthode adoptée.
Par contre ce dont on se souvient, c'est la difficulté qu'on a eu pour résoudre le problème.
Il en résulte que je trouve les réactions de Skullkid et de Fatal-error inacceptables.
Fin de commentaire.

Avatar de l’utilisateur
fatal_error
Modérateur
Messages: 6610
Enregistré le: 22 Nov 2007, 13:00

par fatal_error » 21 Juil 2012, 23:41

Que t'oublies tes solutions, osef.

Je te demande un pseudo code parce que ton code en l'état est simplement inexploitable, et je comprends même pas d'avoir à te le demander. Ne serait-ce que l'explication de ce que fait la fonction.

Maintenant, mes ignorances, les méthodes de travail, etc, je reviendrai pas dessus, le sujet a déjà tellement dévié...qu'hormis les quatre premiers postes de cette discussion, il n'y a rien de bien concret et intéressant.

Pour revenir au problème, placer un polygone A dans le polygone B, je vois pas et je trouve pas de mots clefs adéquats, qui aura quelquechose de concret à proposer?
la vie est une fête :)

Skullkid
Habitué(e)
Messages: 3075
Enregistré le: 08 Aoû 2007, 20:08

par Skullkid » 22 Juil 2012, 00:02

fatal_error a écrit:Pour revenir au problème, placer un polygone A dans le polygone B, je vois pas et je trouve pas de mots clefs adéquats, qui aura quelquechose de concret à proposer?


La seule chose que Dlzlogic a dit de pertinent dans cette discussion c'est justement un algorithme acceptable de réponse à cette question, rendons-le lui : on teste toutes les arêtes du polygone A jusqu'à ce qu'on en trouve une qui intersecte le polygone B. S'il y a une intersection, le problème est terminé. S'il n'y a pas d'intersection, il suffit de tester un sommet du polygone A pour voir s'il est à l'intérieur du polygone B. Mais je comprends aisément que tu l'aies laissé passer entre toutes les inepties...

Avatar de l’utilisateur
fatal_error
Modérateur
Messages: 6610
Enregistré le: 22 Nov 2007, 13:00

par fatal_error » 22 Juil 2012, 00:11

ca c'est pour tester si A est dans B, ou pas.
Ma question, c'était plus, comment faire rentrer A dans B de manière efficace?
la vie est une fête :)

Skullkid
Habitué(e)
Messages: 3075
Enregistré le: 08 Aoû 2007, 20:08

par Skullkid » 22 Juil 2012, 00:22

Ah oui dans ce cas c'est en effet plus compliqué... Ce problème-là je ne l'ai jamais traité, mais il doit y avoir quelque chose de possible si on calcule les centres de gravité et les rayons des deux polygones et qu'on essaye de les superposer. A priori ça ne marche pas par exemple dans le cas où le gros polygone a une partie trop pointue, mais à partir de ce positionnement il y a peut-être un moyen de faire tourner le petit polygone autour de son centre de gravité pour voir s'il peut rentrer... Faut voir :/

C.Ret
Membre Relatif
Messages: 497
Enregistré le: 02 Juil 2012, 13:33

par C.Ret » 22 Juil 2012, 10:22

ampholyte a écrit:
Supposons que j'ai un polygone donné (qu'on notera A), je souhaiterais insérer un polygone extrait d'une base de donnée (noté B), pour l'insérer dans le polygone A tout en vérifiant qu'il est inclut dans le polygone B.

Le petit schéma explicatif :D

Image

C'est pour cette raison que j'essaye de trouver un moyen de connaître l'inclusion ou non d'un point dans un polygone. J'aurais juste à parcourir l'ensemble des points de mon polygone B pour savoir s'il est inclus ou non dans A



J'ai eut, il y a longtemps à traiter un cas similaire.

Mais les conditions initiales étaient un peu différence. En particulier les polygones à considérer étaient tous des polygones convexes. Ceux-ci étaient définis à partir des coordonnées de leurs sommets. Toutes les coordonnées, y compris celle du point M à tester étaient des entiers.

Je pense qu'en organisant un peu les choses, on doit pouvoir adapter la méthode que j'avais utilisée à des polygones quelconques (il faudra certainement découper les polygones concaves en un ou plusieurs sous-parties convexes) et sans problème extrapoler les calculs à des coordonnées réelles (ou float).

Le système dans lequel de travaillais permettait des calculs matriciels rapides sur les entiers uniquement. Il fallait donc autant que possible ne 'jouer' qu'avec des opérations et des indicateurs produisant des résultats entiers. Ce qui ne posait pas de problème car de toute façon les données de base et les résultats ne pouvaient être que des coordonnées entières.



Pour faciliter les explications, prenons un exemple simple : voyons comment on pourrait déterminer simplement (avec des calcul sur les entiers seulement) si le point M(x,y) est ou n'est pas dans le polygone convexe ABCD suivant :
Image


L’idée maitresse de cette détermination est basée sur le fait que le point M doit être à l’intérieur de la région du plan (mais on peut étendre cette notion à l’espace) délimité par les cotés du polygone.

En observant la figure, on se rend vite compte que M est à l’intérieur s’il est simultanément du bon coté de chacune des droites supportant les cotés successifs du polygone.
En effet, chaque droite supportant un des coté du polygone partage le plan en deux demi-plans dont l’équation caractèristique peut s’exprimer facilemetn en fonction des coordonnées x et y.

Ainsi, par exemple, la droite AB partage le plan en deux demi-plans :
- Le demi-plan supérieur (au-dessus de AB) pour lequel :
- Le demi-plan inférieur (au-dessous de AB) pour lequel :
Sachant que la droite elle-même correspond à l’ensemble des points vérifiant l’égalité

Image

Le même raisonnement peut être tenu pour chacun des coté du polygone en considérant l’équation caractéristique de chacune des droites soutenant les cotés du polygone.

Dans notre cas, M(x,y) est à l’intérieur du polygone, s’il est simultanément
- en-dessous de AB ( ),
- à gauche de BC (),
- en-dessus de CD ( ),
- à droite de DA ( ),

Image

Donc, à partir des coordonnées des point ABCD du polygone, il convenait de construire une les équations caractéristiques des droites directrice de chaque coté du polygone, convenablement organisées et ordonnées dans une matrice M de façon à ce qu’un simple produit matriciel permette de déterminer de quel coté (positif ou négatif) le point M de coordonnées (x,y) se trouve.
Notons que cela revient quelque part à étudier le signe d’un produit vectoriel. Si on se débrouille bien, seul le signe des éléments de ce produit matriciel est à considérer et à comparer avec le résultat attendu pour un point à l’intérieur du polygone.



Dans mon cas, les cas où M se trouve exactement sur un coté du polygone étaient à rejeter, ce qui me faciliter les choses car si un des éléments du produit matriciel (produit vectoriel) était nul (égal à zéro) c’est que le point M était aligné avec un des cotés, donc au pire sur un des coté est donc il n’était pas strictement à l’intérieur du polygone.

Mais ce système fonctionne aussi bien si l'on considère les coté comme faisant partie de l'intérieur du polygone. Dans ce cas, un résultat nul n'exclu pas le point M.

L'avantage était un calcul rapide (manipulation que d'entiers) et surtout un court-circuit qui évite d'avoir à tester M avec tous les points du polygone. C'était important car les polygone que je traitais été des contours géographique avec plusieurs milliers de points.

Il suffisait d'un signe non conforme pour ^sortir de la boucle de test et indiquer que M ne faisait pas partie du polygone.
Notons aussi qu'il était facile d'inverser le sens du test pour déterminer si le point M est à l'extérieurou l'intérieur du polygone.


Maintenant, cela ne fonctionne que pour les polygones convexes.


En cas de polygone quelconques, il faut mettre en ordre les choses.
Soit en découpant un polygone concave en une ou plusieurs sous partie convexe; on testera donc l'intériorité du point M(x,y) en plusieurs étapes, un test pour chaque sous-polygone:

Image
Le polygone ABCDEFG est découpé en deux polygone convexes. Le point M appartient au polygone ABCDEFG initial s'il appartient à ABCG ou à CDEFG.


Soit en considérant l'enveloppe convexe du polygone quelconque dans lequel on repère tous les sous-polygones convexes. On teste alors l'intériorité du point M(x,y) en deux étapes. La première consistant à vérifier aue M est à l'intérieur de l'enveloppe convexe. Puis, en cas de résultat positif, on vérifie que M n'appartient à aucune des sous-concavités:
Image
On considère dans un premier temps l'enveloppe ABDEFG convexe du polygone inital ABCDEFG.
Dans un premier temps on vérifie donc que M(x,y) appartient à cette enveloppe ABDEFG.
Si c'est le cas, on vérifie alors qu'il n'appartient pas à la concavité BCD (ainsi qu'aux suivantes si plusieurs concavités existent).

Comme on le voit, la facilité et rapidité (algorithmique) à déterminer si M(x,y) appartient à un polygone quelconque du plan dépend beaucoup du prétraitement des données et donc surtout de la "forme" des polygones à considérer.
Dans le problème qui m'avait été soumis, les polynômes était nombreux et contenaient beaucoup de points (par rapport à ce que pouvait traiter le système informatique utilisé à ce moment là). Mais par chance, ces polygones étaient les mêmes (ou pratiquement) à détermination. Le temps passer à optimiser leur codage (et mémorisation) était rapidementamorti par le gain de temps à déterminer l'intériorité des nombreux et aléatoires points M.

Par contre, si les polygone à considérer à chaque détermination sont diffèrents, il faudra automatiser leur 'codage' et éventuellemetn faire appel à des notion plus générale de topologie, des triangularisation de Boris Delaunoy ou des réseaux de Voronoï.


Ensuite, ce n'est pas parce que tous les sommet M(n) d'un polygone sont à l'intérieur d'un polygone concave ABCD...XYZ que ce polygone M(n) est entièrement inclus dans le premier.
L'approche point par point n'est peut-être pas de ce type de cas la meilleure approche.

Dlzlogic
Membre Transcendant
Messages: 5273
Enregistré le: 14 Avr 2009, 13:39

par Dlzlogic » 22 Juil 2012, 13:06

Bonjour C.Ret,
Votre méthode est effectivement à mon avis la meilleure dans le cas de triangles. Cela conduit directement à calculer des produits vectoriels.
et sans problème extrapoler les calculs à des coordonnées réelles (ou float).

Vous dites que la méthode que vous exposez est prévue pour des entiers.

Il n'en reste pas moins vrai que le difficulté posée par les réels ramenées à des valeurs finies, reste entière.
Dans le cas où il n'y a pas de création de lignes produites par du traitement, le problème ne se pose pas puisque un point est d'un côté ou d'un autre d'une ligne. Il peut être aussi sur une ligne, Il faudrait pour cela que (xm-xa)/(ym-ya) = (xb-xa)/(ya-ya), ce qui n'est pas impossible.
Je suppose que cotre application est du type SIG, c'est à dire que vous avez une base et vous devez faire un certain nombre de test, d'opération par rapport à cette base.
Le problème que j'évoque arrive par exemple lorsqu'un a une division à faire par une différence de deux réels a et b, il ne faut pas tester "si (a != b)" mais "si (abs(a-b) > e)".

Mais je vais arrêter là de dire des inepties, comme le dit si élégamment Skullkid.

Dlzlogic
Membre Transcendant
Messages: 5273
Enregistré le: 14 Avr 2009, 13:39

par Dlzlogic » 22 Juil 2012, 21:40

Bonsoir,
Fatal_error a posé une question intéressante à laquelle j'ai oublié de répondre
Ne serait-ce que l'explication de ce que fait la fonction.
Etant donné une ligne polygonale, et un point, la fonction revoie "true" si le point est intérieur à la zone délimitée par la ligne, "false" dans le cas contraire. La fonction a la caractéristique "const" elle ne fait rien d'autre.

Avatar de l’utilisateur
ampholyte
Membre Transcendant
Messages: 3940
Enregistré le: 21 Juil 2012, 08:03

par ampholyte » 23 Juil 2012, 10:58

Bonjour,

Je vous remercie tous pour votre aide et pour les solutions que vous me proposez.

J'ai également pu voir où se trouvait les limites de chaque algorithme.

Merci à Dlzlogic pour son code qui m'aidera à implémenter les algorithmes proposés.

Je vais essayer de mettre en oeuvre l'algorithme de C.Ret (que je remercie infiniment) en simplifiant dans un premier temps la forme de mes polygones (en gardant uniquement des polygones convexes).

Il faudra donc que je teste également si le polygone de départ (polygone A) est convexe également (comme il est généré un peu aléatoirement, il peut également être concave).

Je ne pourrais construire de polygone B (de ma base, simplifié en convexe) que si le polygone A est lui même convexe.

Je verrais par la suite comment améliorer l'algorithme pour permettre de vérifier si un polygone B de forme quelconque est ou non dans le polygone A.

Une autre petite question me vient sur ce problème, n'est-il pas possible de créer une relation entre la position des centres de masse ?


Je pensais également à une autre solution (je ne sais pas du tout si elle est possible, et toujours vrai). Supposons toujours nos deux polygones A (convexe) et B (convexe).
Supposons qu'on calcule l'aire de nos deux polygones A et B logiquement si B est à l'intérieur de A on a :
Aire de B < Aire de A

De plus si les polygones sont tous les deux convexes et si leur centre de masse sont confondus,
peut-on dire que le polygone B est à l'intérieur de A ?
(Dans le cas où cette "fausse théorie" est vérifiée, serait-il possible de généraliser sur un polygone B quelconque avec des contraintes sur la forme de ce polygone peut-être sur les angles ou autre)

Merci encore pour tous vos commentaires qui m'ouvrent de nouvelles perspectives pour mon projet :)

Avatar de l’utilisateur
fatal_error
Modérateur
Messages: 6610
Enregistré le: 22 Nov 2007, 13:00

par fatal_error » 23 Juil 2012, 11:40

Il n'en reste pas moins vrai que le difficulté posée par les réels ramenées à des valeurs finies, reste entière.

et on remet ca avec les epsilone :marteau:

Merci à Dlzlogic pour son code qui m'aidera à implémenter les algorithmes proposés.

Je suis pas sur que son code serve à grand chose, mais bon :ptdr:

pour ma part, j'ai essayé de placer un polygone dans l'autre, c'est pas trivial.
Je suis parti sur un algo du style
Code: Tout sélectionner
calquer p.barycentre sur pol.barycentre
pol le polygone englobant
p le polygone englobé
tant que redimensionner p de petit jusqu'à taille normale
 pour chaque pol.bord
   emettre une force dirigee vers linterieure (orthogonale au bord) de module 1/r, r la distance entre le bord et le point de contact
 finpour
 calculer le moment resultant et tourner p en accord
 recalculer la resultante et deplacer p en accord
fin tant que


L'idée, c'est que quand p est tout petit, il est inclut à coup sur dans pol.
puis petit à petit on tourne p pour qu'il s'oriente bien avec les parois avoisinantes.
Et on le recale au centre par translation, avec l'idée que quand on est pres du bord, la force le repousse dans le bon chemin. ( :ptdr: )

Et enfin on grandit jusqu'à obtenir la taille initiale de p.

Bon, ca marche pas très bien, mais jai ptet des couac dans l'implem aussi.
la vie est une fête :)

Avatar de l’utilisateur
ampholyte
Membre Transcendant
Messages: 3940
Enregistré le: 21 Juil 2012, 08:03

par ampholyte » 23 Juil 2012, 12:18

L'idée, c'est que quand p est tout petit, il est inclut à coup sur dans pol. puis petit à petit on tourne p pour qu'il s'oriente bien avec les parois avoisinantes. Et on le recale au centre par translation, avec l'idée que quand on est pres du bord, la force le repousse dans le bon chemin. ( ) Et enfin on grandit jusqu'à obtenir la taille initiale de p.


Quand tu dis que p et pol sont deux polynômes, ils sont par hypothèse convexes ou quelconques ?

Petite question au niveau de la rapidité, car pour le problème que je pose je vais avoir plusieurs centaines voire plusieurs milliers de polygones. En outre, il ne faut pas que le polygone soit déformé, il peut être redimensionner s'il garde les mêmes proportions.

Je pensais plutôt à un algo de ce style
Code: Tout sélectionner
PolTest : Tableau contenant mes polygones à tester
PolBase : Tableau contenant mes polygones de base
tester(...,...) :  est une fonction qui me renvoie True si le polygone à tester est inclus dans le polynome de base
construction(...) : fonction qui construit ma forme 3D

Pour chaque polA de polBase :
      Pour chaque polB de polTest:
            if(tester(polA,polB)) : construction(polB)

Dlzlogic
Membre Transcendant
Messages: 5273
Enregistré le: 14 Avr 2009, 13:39

par Dlzlogic » 23 Juil 2012, 12:33

@Fatal_error,
As-tu au moins essayé l'intersection de deux droite, puis la comparaison de la distance du point d'intersection à chacune des droites à 0.
Phrase trop longue, alors je recommence.
Soit une droite D1 connus par 2 points A et B, et une droite D2 connue par 2 points C et D. On a choisi D1 et D2 non parallèles.
On calcule l'intersection I de D1 et D2.
On calcule la distante d1, de I à D1, puis d2 de I à D2.
On écrit le test suivant
si (d1 == 0) print "égal"
else print "différent"

Par ailleurs, je n'ai pas vu dans l'explication d'Ampholyte la moindre notion de recherche d'emplacement, ou de recherche de possibilité. Autrement dit, je n'ai pas vu que le polygone était un objet qu'on essayait de placer dans un polygone.
Par contre, j'ai compris que d'une part on a un polygone A, de position et de forme connue, d'autre part on a un polygone B de position et de forme connue, la question posée "est-ce que le polygone B est inclus dans le polygone A".
La solution d'intersection des côtés me parait la plus simple.
La solution de découpage de polygones pour avoir des polygones tous convexes devient vite difficile à gérer.
Je crois que pour pouvoir vous aider efficacement, il faudrait en savoir un peu plus sur ce que vous voulez faire, par MP si c'est confidentiel.

Skullkid
Habitué(e)
Messages: 3075
Enregistré le: 08 Aoû 2007, 20:08

par Skullkid » 23 Juil 2012, 12:34

ampholyte a écrit:Supposons qu'on calcule l'aire de nos deux polygones A et B logiquement si B est à l'intérieur de A on a :
Aire de B < Aire de A


Oui, mais malheureusement le seul fait que l'aire de B est inférieure à celle de A ne te garantit pas de pouvoir placer B à l'intérieur de A. De manière générale je ne crois pas qu'il existe de critère simple qui caractérise cette possibilité, on ne peut que trouver des conditions nécessaires ou suffisantes.

Pour le placement en lui-même je n'ai toujours pas d'idée vraiment concluante, on peut trouver des contre-exemples à la superposition des centres de gravité et des rayons même quand A et B sont tous les deux convexes (je n'ai pas réussi à trouver de contre-exemple quand A est convexe et qu'on superpose seulement les centres de gravité, mais je n'ai pas réussi non plus à montrer que cette superposition permettait de conclure...).

fatal_error, comment tu calcules l'intensité de ta force ? Dans ton pseudo-code tu dis que c'est l'inverse de la distance entre le bord et le point de contact, mais cette distance vaut toujours 0 non ? Sinon j'ai du mal à voir la condition de terminaison.

Avatar de l’utilisateur
fatal_error
Modérateur
Messages: 6610
Enregistré le: 22 Nov 2007, 13:00

par fatal_error » 23 Juil 2012, 12:45

fatal_error, comment tu calcules l'intensité de ta force ? Dans ton pseudo-code tu dis que c'est l'inverse de la distance entre le bord et le point de contact, mais cette distance vaut toujours 0 non ? Sinon j'ai du mal à voir la condition de terminaison.

par exemple, si je prends un bord [CD] de p et le bord extérieur [AB] de pol
je projette [CD] sur [AB], de facon à récupérer le troncon de segment [CBound,DBound] soumis à la force exercée par pol.
Typiquement, si C projeté sur [AB] est en dehors de de [AB] alors je considère CBound[xA, yC]

J'exprime [CBound,DBound] dans le repère de [AB, vecteur orthogonal à AB]
et (CBound,DBound) est un segment, sur lequel en tout point une force est exercée, et je considère sa droite d'eq y=ax+b

J'intègre alors


As-tu au moins essayé l'intersection de deux droite, puis la comparaison de la distance du point d'intersection à chacune des droites à 0.

y a t-il un quelconque intérêt?


edit: le problème vient pas du calcul de la résultante qui place le polygone pas mal. Le prob, c'est que la rotation du polygone est pas forcément la bonne (dans le sens on converge vers un équilibre qui est pas la position la plus adéquate), et l'agrandissement de fait n'est pas efficace
Image
le carré en bas a gauche, il est à placer dans le polygone byzarre.
On voit que quand on agrandit, la rotation fait sortir le carré et après c'est dead.
la vie est une fête :)

Avatar de l’utilisateur
ampholyte
Membre Transcendant
Messages: 3940
Enregistré le: 21 Juil 2012, 08:03

par ampholyte » 23 Juil 2012, 12:58

Je crois que pour pouvoir vous aider efficacement, il faudrait en savoir un peu plus sur ce que vous voulez faire, par MP si c'est confidentiel.


Pour essayer de faire simple, je dois créer un script en python qui me permettra dans un logiciel 3D (Maya) de créer une générateur de ville (aléatoire).

Pour cela, il y a plusieurs étapes à la construction de celle-ci.

1) La construction du "sol". Pour cela j'utilise l'algorithme L-system qui fonctionne grâce à une grammaire que je définis (pour plus d'information http://fr.wikipedia.org/wiki/L-System .

2) Une fois mes "lignes construites" je récupère tous les points d'intersections pour former ce qu'on appellera un Bloc

3) Sur chaque bloc je le subdivise en ce qu'on appellera Parcelle

4) Sur chaque parcelle je souhaite construire une habitation en 3D.
Pour ce faire, je récupère les informations des points délimitant ma parcelle (un tableau de coordonnée de point). Voici mon premier polygone (que j'ai appelé A ou base).

5) Sur ce polygone, je souhaite créer un socle (une nouvelle liste de point définissant un nouveau polygone) permettant la construction de mon bâtiment (que j'ai appelé B ou test).

Dans un premier temps j'ai juste copié et réduit la taille de chaque parcelle pour pouvoir créer mon socle.

Maintenant je souhaite faire évoluer mon code afin que le rendu de la ville soit plus réaliste et plus sympa. Pour cela, je souhaite construire un tableau multidimensionnel qui contiendra une liste de point correspondant à un socle que j'aurais définit préalablement. (donc plusieurs socles dans le tableau)

Puis poser sur chaque parcelle un des socles définit dans mon tableau multidimensionnel.
(C'est pour cette raison que j'essaye de trouver un moyen d'être sûr que mon socle soit inclus dans ma parcelle)

6) Construire mon bâtiment en suivant le socle.

Voilà pour la réalisation de mon projet, j'espère avoir été clair et précis dans le déroulement de mes étapes. N'hésitez pas à poser des questions si besoin :).

Merci encore à tous pour votre aide.

Dlzlogic
Membre Transcendant
Messages: 5273
Enregistré le: 14 Avr 2009, 13:39

par Dlzlogic » 23 Juil 2012, 13:58

Bon, je me doutais d'un truc comme ça.
Je pense que la meilleure approche c'est celle que ressemble le plus à la réalité.
Il y a plusieurs types de ville, ou plutôt plusieurs types de quartier dans une ville.
- le centre-ville avec des bâtiments administratifs, église, parc etc.
- les quartiers résidentiels, grandes parcelles, grandes maisons.
- les quartiers d'affaire de commerce etc. pratiquement pas d'espaces verts en bord de rue
etc.

Il y a deux manières de construire
soit la parcelle est ce qu'elle est et le bâtiment s'adapte aux limites connues en tenant compte de distances de prospect ou de recul,
soit l'ensemble de la zone est aménagé et construit par une personne unique. Dans ce cas, les limites de parcelle seront parallèles et souvent perpendiculaires à la voie, les distances entre celles-ci seront généralement des longueurs précises et non aléatoires, les superficies des parcelles seront généralement du même ordre.
Là il faut que je m'arrête, sinon, je pourrais en écrire des pages.

Ce que je veux surtout dire, c'est que les problèmes technico-informatiques sont relativement mineurs, par rapport aux difficultés liées aux problèmes d'urbanisme.

En deux mots, pour résumer à propos de votre question initiale, un côté d'un bâtiment est toujours ou presque, soit confondu avec une limite, celle qui donne sur la voie, soit parallèle à une distance qui ne dépend pas du hasard.

Avatar de l’utilisateur
ampholyte
Membre Transcendant
Messages: 3940
Enregistré le: 21 Juil 2012, 08:03

par ampholyte » 23 Juil 2012, 14:09

Je suis tout à fait d'accord avec vous, et c'est également une option qui sera disponible dans ce projet.

Mais dans un quartier pavilionnaire, il est également possible d'avoir ce type de maison.
Image

Dans un terrain carré par exemple. Et même si une maison de ce type respecte le parallélisme du terrain, j'ai besoin de savoir si la base de cette maison est incluse dans ma parcelle.

Si vous voyez une solution qui aurait pu m'échapper, je suis preneur de toutes les idées (aussi bien bonne que mauvaise :lol3: ).

Avatar de l’utilisateur
fatal_error
Modérateur
Messages: 6610
Enregistré le: 22 Nov 2007, 13:00

par fatal_error » 23 Juil 2012, 14:29

si ta parcelle est rectangulaire, et que ta maison est censer respecter le parallèlisme,
t'as qu'à construire un rectangle englobant ta maison, et voir si les dimensions de ce rectangle sont plus petites que ta parcelle, non?
la vie est une fête :)

 

Retourner vers ✯✎ Supérieur

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 40 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