Script pour polygone non croisé

Rousseau-Wallon shared this question 2 years ago
Answered

Bonjour,

J'ai écris un script sur le point A pour éviter que le polygone ABCDE ne soit croisé (la liste Booléens correspond à l'ensemble des intersections de ses côtés).

Mais quand A touche un côté du polygone, il reste dessus.

Je n'arrive pas à le débloquer.


Autre question : peut-on faire un script sur le polygone directement, plutôt que sur chacun de ses points ?

Comments (8)

photo
1

Un autre principe de solution

photo
1

Merci !

Très intéressant ce code : Exécute(Compactée("SetValue("+N+", "+V+")",N, Nam,V, l1_{old}))

J'avais essayé de remplacer l1 par l1_old directement, on ne peut pas faire ça si je comprends bien, il faut remplacer chacun de ses éléments un par un.

J'ai tenté d'implanter ta méthode dans mon fichier de triangulation par la méthode dite "des oreilles", mais je me suis emmêlé les pinceaux..

oreilles simples = sans le contrôle du croisement, oreilles croix : avec (raté)


au passage : oreilles simples contient une instruction TANT QUE que je ne croyais pas possible, alors qu'il suffisait de faire deux boutons qui se renvoient la balle

photo
1

"J'avais essayé de remplacer l1 par l1_old directement, on ne peut pas faire ça si je comprends bien, il faut remplacer chacun de ses éléments un par un."

Oui, parce que l1 n'est pas un objet libre, seuls les points "emballés" dans l1 sont des objets libres.

photo
1

Triangulation en utilisant Delaunay et en éliminant les routes à l'extérieur du polygone.

Ne fonctionne pas à 100%.

photo
1

Pour ne pas obtenir de polygone croisé ta solution et la mienne ont le même inconvénient : quand par exemple le point A touche un segment frontière, il ne peut pas s'y déplacer, il faut l'éloigner d'elle pour qu'il retrouve sa mobilité. Or A pourrait glisser sur ce segment, ce serait mieux.

photo
1

Oui, glisser sur ce segment est une bonne idée.


Seulement : Je n'ai pas (encore ?) de solution.


Peut-être : Inégalité avec le segment le plus proche, mais pas connecté. A CoordonnéesDynamiques ou les deux. Le problème : les dépendances circulaires.

photo
photo
1

une autre idée : la zone où peut se déplacer un sommet n'est-elle pas calculable ?

pour un quadrilatère c'est clair : chaque zone de déplacement est égal à la réunion d'un demi-plan et d'un triangle.

pour un pentagone, j'ai essayé vite fait et je crois que oui.


Donc, pour un quadrilatère, il suffit de restreindre le déplacement d'un sommet à sa zone par un script :

Si(EstDansRégion(A, poly1),SoitValeur(A,A),SoitValeur(A, PointPlusProcheRégion(poly1,A)))

(pour tester j'ai construit la zone comme un polygone assez grand, mais on peut je pense l'obtenir de façon exacte :

zone = un triangle U un demi-plan donné par l'équation d'une droite)

Files: zone.ggb
photo
1

le fichier zone amélioré : chaque zone est formé de 2 triangles : celui du quadrilatère et un autre rectangle isocèle inscrit dans un cercle de rayon 1000

© 2021 International GeoGebra Institute