Le point n'est pas le plus proche

Rousseau-Wallon shared this problem 2 years ago
Solved

Bonjour,

Dans la figure ci-dessous le script sur C est :

Si(EstDansRégion(C,a), SoitValeur(C,C) , SoitValeur(C,PointPlusProcheRégion(a,C)) )

Or si on approche C de la frontière de la région il est systématiquement et mystérieusement renvoyé à un point de coordonnées (1,44 ; 1,51), ce qui n'est presque jamais le point le plus proche..

Files: pppr.ggb

Comments (12)

photo
1

on peut éviter l'erreur avec le script

Si(EstDansRégion(C,a),SoitValeur(C,C),SoitValeur(C,PointPlusProcheRégion(a,C'')))

où C'' est le symétrique du symétrique de C par rapport à y = x (c'est à dire C'' = C !!!).


Par ailleurs la création du point le plus proche d'un point A qui n'est pas dans la région donne toujours un point B de coordonnées (0.83 ; 0.96). Bouger A ne change pas B... jusqu'à ce qu'on ait amené A dans la région (*), où alors tout devient normal.


(*) ou visiblement qu'on enregistre, ferme puis réouvre le fichier

photo
1

extra !

un petit raisonnement : si les symétriques C' et C'' sont calculés AVANT de placer le nouveau point C il y a toutes les chances que C ne reste pas accroché à la droite y = x, puisque le point d'avant est plus éloigné de cette droite que le point d'après.

et bingo ! ça marche : C peut glisser sur la droite

ça c'est vraiment cool

photo
1

What are you trying to do? What's wrong with

C=PointIn(a)

photo
1

Je ne crois pas qu'on puisse utiliser PointIn(a) dans la figure ci-dessous (quadrilatère non croisé) :

A peut se déplacer dans zoneA, qui dépend de B, C et D,

B peut se déplacer dans zoneB, qui dépend de A, C et D, etc.

Un script comme ci-dessus est nécessaire je pense ?

photo
1

ok ce n'est pas un problème, en tous cas pas pour l'instant

car il y a quand même une erreur

photo
1

This is not "not a Problem"

and the justification that the command is not necessary is not comprehensible (counter question: why was it created)

.

The description in the manual does not correspond to reality.

And I think the command as he works now is not usable.

One of the following actions is necessary:

  • Change the description in the manual
  • Correct the bug.
  • A note about a workaround.
  • Remove the command from GGB

But doing nothing is certainly wrong.

.

In the attachment


  • a simple workaround
  • a sample to use this function (now with workaround) and PointIn() is not a solution for this sample

photo
1

Sorry, I've got different things mixed up.

Please consider the above post as deleted.

photo
photo
1

Même si ma figure extra.ggb postée plus haut marche, je crois que l'explication que je lui avais donnée est fausse..

Et je ne comprends pas bien un script tel que :

SoitValeur(A'', A')

SoitValeur(A',A'')

SoitValeur(A,A')

ou

SoitValeur(Workaround,C)

SoitValeur(C, Workaround)

Est-ce que tu peux m'expliquer à quoi ils servent et comment ça marche ?

Les point A'et C obtenus peuvent-ils effectivement aller au bord de la région ?


Autre question : c'est bien dans le cas d'une définition circulaire que PointIn(a) ne peut pas marcher ?

photo
1

retour sur ma deuxième question juste au-dessus :

avec la région a : x<=y la frontière est y = x.

possible que je ne comprenne rien mais il me semble que ton point C ne peut pas VRAIMENT y aller (le booléen CisonFrontier est toujours faux)

alors qu'avec ma figure extra2.ggb il y va :

photo
1

Désolé, je crois que j'ai mélangé certaines choses.

S'il vous plaît, oubliez mes derniers pas sur ce thème.

photo
photo
1

We've made a small improvement to ClosestPointRegion() for the next release.


I still don't understand what's wrong with using PointIn() though, it works for me with 4zones.ggb (also DynamicCoordinates() is better than using scripting)

photo
1

Ok, PointIn() marche pour les 4zones simultanément, j'ai fait la figure même si je ne sais pas comment elle marche..


mais il y a une autre erreur : PointIn( y<x ) donne le même résultat que PointIn( y<=x ). Il faudrait faire en sorte que le point puisse aller (et rester) sur la frontière dans le second cas, ce qu'il ne fait pas actuellement.

© 2021 International GeoGebra Institute