Question

Je programme un algorithme où j'émiettée la surface d'une sphère en des points de grille (pour plus de simplicité j'ai les lignes de grille parallèles et perpendiculaires aux méridiens). Compte tenu d'un point A, je voudrais être en mesure de prendre efficacement une grille « carré » et déterminer le point B sur la place avec le moins de coordonnées sphériques la distance AB. Dans le cas dégénéré les « carrés » sont en fait des « triangles ».

Je suis en fait que l'utilise Bound qui carrés que je suis à la recherche, donc je peux aussi accepter un minoration si elle est seulement un tout petit peu au large. Pour cette raison, je dois l'algorithme pour être autrement extrêmement rapide, il serait préférable de prendre juste la perte de précision et de recherche quelques places.

Était-ce utile?

Autres conseils

Pour les points sur une sphère, les points les plus proches dans le plein espace 3D sera également le plus proche mesurée le long de la surface de la sphère. Les distances réelles seront différentes, mais si vous êtes juste après le point le plus proche, il est probablement plus facile de minimiser la distance 3D plutôt que de se préoccuper de grands arcs de cercle, etc.

Pour trouver la distance orthodromique réelle entre deux points (latitidude, longitude) sur la sphère, vous pouvez utiliser la première formule dans ce lien .

Quelques points, pour plus de clarté.

Sauf si vous souhaitez spécifiquement ces carrés pour être carré (et donc de ne pas adapter exactement dans cette disposition parallèle et perpendiculaire en ce qui concerne les méridiens), ceux-ci ne sont pas exactement carrés. Ceci est particulièrement visible si les dimensions de la place sont grandes.

La question parle d'une sphère [parfaite]. Les questions seraient quelque peu différentes si nous envisagions la Terre (ou d'autres planètes) avec ses pôles aplaties.

Voici un « algorithme » qui correspondrait au projet de loi, je doute qu'il est optimal, mais pourrait offrir une bonne base. EDIT : voir la suggestion de Tom10 à travailler avec la plaine distance 3D entre les points plutôt que la distance grande cirle correspondant (c.-à celle du cordon plutôt que l'arc), car cela permettra de réduire considérablement la complexité du formules.

Problem layout:  (A, B and Sq as defined in the OP's question)
 A  : a given point the the surface of the sphere
 Sq : a given "square" from the grid 
 B  : solution to problem : point located within Sq which has the shortest 
      distance to A.
 C  : point at the center of Sq

Tentative algorithm:
Using the formulas associated with [Great Circle][1], we can:
 - find the equation of the  circle that includes A and C
 - find the distance between A and C. See the [formula here][2] (kindly lifted
    from Tom10's reply).
 - find the intersect of the Great Circle arc between these points, with the
   arcs  of parallel or meridian defining the Sq.
   There should be only one such point, unless this finds a "corner" of Sq, 
   or -a rarer case- if the two points are on the same diameter (see 
   'antipodes' below).
Then comes the more algorithmic part of this procedure (so far formulas...):
 - find, by dichotomy, the point on Sq's arc/seqment which is the closest from
   point A.  We're at B! QED.

Optimization:  
 It is probably possible make a good "guess" as to the location
 of B, based on the relative position of A and C, hence cutting the number of
 iterations for the binary search.
 Also, if the distance A and C is past a certain threshold the intersection
 of the cicles' arcs is probably a good enough estimate of B.  Only when A
 and C are relatively close will B be found a bit further on the median or
 parallel arc in these cases, projection errors between A and C (or B) are
 smaller and it may be ok to work with orthogonal coordinates and their 
 simpler formulas.

Another approach is to calculate the distance between A and each of the 4 
corners of the square and to work the dichotomic search from two of these
points (not quite sure which; could be on the meridian or parallel...)

( * ) *Antipodes case*:  When points A and C happen to be diametrically 
opposite to one another, all great circle lines between A and C have the same
 length, that of 1/2 the circonference of the sphere, which is the maximum any
 two points on the surface of a sphere may be.  In this case, the point B will
 be the "square"'s corner that is the furthest from C. 

J'espère que cette aide ...

La méthode paresseuse limite inférieure est de trouver la distance par rapport au centre du carré, puis soustraire la moitié distance diagonale et lié en utilisant l'inégalité du triangle. Compte tenu de ces places ne sont pas réels, il y aura effectivement deux distances diagonales - nous utiliserons plus. Je suppose que ce sera raisonnablement précis ainsi.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top