Cercle sur une sphère (python)
Répondre à la discussion
Affichage des résultats 1 à 9 sur 9

Cercle sur une sphère (python)



  1. #1
    antwan_astro

    Cercle sur une sphère (python)


    ------

    Hello ,

    J'essaie en vain de trouver comment aller chercher les points équidistants à un point quelconque sur une sphère (un cercle sur la sphère donc).


    J'ai une carte sous forme de matrice, et l'idée est de créer une fonction qui prend comme paramètre un point (en coordonnées shpériques), et qui retourne la valeur du pixel correspondant par rapport à la moyenne des valeurs des pixels situés à une certaine distance (ou angle c'est pareil).

    Une solution "bourrin" consisterait à aller piocher parmi tous les points de la matrice ceux qui respectent le critère, mais c'est pas très élégant, et pas très rentable vu la taille de la map... (il faudrait la parcourir mille fois)
    Merci d'avance !

    Voilà ce que j'ai pour le moment :
    Code:
    def compare(map,theta,phi):
    # Entrée : map = carte sous forme de matrice / theta, phi = coordonnées d'un point sur la carte
    # Sortie : dT = différence de température entre ce point et son entourage
    nb_Iterations=1000
    
    # Conversion coordonnées->pixel
    NSIDE=hp.get_nside(map)
    pixel=hp.ang2pix(NSIDE,theta,phi)
    
    # Lecture de la température du pixel
    Tpix=map(pixel)
    
    # Lecture de la température et moyenne sur un cercle autour du point
    vecteur=hp.pix2vec(NSIDE,pixel)
    X=vecteur(1)
    Y=vecteur(2)
    Z=vecteur(3)
    
    Tring=0
    for i in range(nb_Iterations) :
    	# Comment chercher les points à une distance "a" du pixel?
    	pixRing=hp.ang2pix(NSIDE,thetaRing,phiRing)
    	Tring+=map(pixRing)
    
    Tring=Tring/nb_Iterations
    # Comparaison
    dT=abs(Tpix-Tring)
    return dT

    -----
    Dernière modification par antwan_astro ; 24/03/2015 à 16h02.

  2. #2
    bdom001

    Re : Cercle sur une sphère (python)

    Si j'ai bien compris votre problème, il s'agit de déterminer l'équation du cercle C résultant de l'intersection d'un plan (P) et d'une sphère S, connaissant A, un point du cercle C. Je pense que c'est faisable.

    Disons que vous avez sur votre sphère un point P (pôle) appartenant à l'axe (OP) perpendiculaire au plan (P) et passant par le centre du cercle C.

    La première idée est bien si vous êtes familier avec les matrices (rotation, en l'occurrence). Elle consiste à ramener le point P sur l'axe des (z), d'en déduire l'équation du cercle : pour , trouver le point qui vous intéresse, puis faire la rotation inverse.

    Sinon,

    1) Déterminer l'équation du plan (P) :
    L'équation d'un plan perpendiculaire à l'axe (OP) s'écrit trivialement :
    se détermine facilement si on considère que le point A, dont les coordonnées sont connues, appartient au plan (P) en question et où sont les coordonnées du point P.
    Vous disposez donc maintenant d'une équation de plan du style sont les coordonnées du point A.

    2) L'équation de la sphère S centrée en O et dont le rayon R est connu s'écrit facilement :

    Vous partez du principe que si un point M(x,y,z) appartient à la fois à la sphère S et au plan (P), ses coordonnées satisfont les équations (1) et (2), ce qui vous donne un système que vous pouvez résoudre comme suit :

    De l'équation (1), vous déduisez:

    Par substitution, dans (2) vous obtenez
    Résolvez (c'est un peu fastidieux) en fonction de sur (équation du second degré à racines réelles) et obtenez à priori deux équations du style , ainsi qu'une plage des valeurs de pour laquelle est un réel.
    et déduisez-en :



    Je n'ai pas été jusqu'au bout, mais normalement, ça doit aller.
    Cordialement.

  3. #3
    antwan_astro

    Re : Cercle sur une sphère (python)

    Hello, merci de votre réponse,

    si on considère que le point A, dont les coordonnées sont connues, appartient au plan (P)
    En fait A n'appartient pas au plan du coup, mais ça ne change pas grand chose.

    J'avais essayé au début de faire un changement de référentiel pour mettre le centre sur (Oz), et de faire varier seulement phi (équivalent à la longitude), le problème semble être que ça ne pointe jamais exactement sur le centre d'un pixel, du coup il ne prend aucun point.

    J'ai trouvé une alternative, mais je bute encore sur un souci :

    Je fais un test sur les pixels, et ceux dont la distance avec le centre est comprise entre Rc-taille d'un pixel et Rc+taille d'un pixel, je les considère sur le cercle. En fait ça fait une sorte d'anneau très fin, ce qui est plutôt cool.

    Le souci est que je me retrouve avec un disque, et non un anneau (quand je trace pour voir si ça marche bien), pourtant mon critère semble correct (même s'il ne l'est de toute évidence pas).

    Ledit critère :
    Code:
    while i<npix:
    	x=hp.pix2vec(nside,i) # je prends le vecteur position des pixels de la matrice 
            if ((x[0]-X[0])**2+(x[1]-X[1])**2+(x[2]-X[2])**2-Rc**2<=4*np.pi/npix): #x[0] c'est x, x[1] c'est y et x[2] c'est z. Le X en majuscule c'est les coordonnées du centre 
    		map[i]=1 # c'est là que je remplis ma carte avec des 1.
    		j+=1
    	i+=1
    Dernière modification par antwan_astro ; 25/03/2015 à 16h04.

  4. #4
    bdom001

    Re : Cercle sur une sphère (python)

    Si votre critère est: « Rc-taille < distance < Rc+taille », cela fait 2 conditions à tester. Or je n'en vois qu'une seule dans votre code.

  5. A voir en vidéo sur Futura
  6. #5
    antwan_astro

    Re : Cercle sur une sphère (python)

    Oui c'est normal, en fait j'ai transformé le critère AM^2 = Rc^2 en AM^2 - Rc^2 < 4pi/npix (pour un matheux c'est un peu approximatif, mais ça fera l'affaire)

  7. #6
    antwan_astro

    Re : Cercle sur une sphère (python)

    Et ce qui se passe c'est qu'il remplit tous les pixels qui répondent au critère AM^2 < Rc^2

  8. #7
    bdom001

    Re : Cercle sur une sphère (python)

    Ben c'est pas ce cela fasse l'affaire, mais cela me semble faux :
    Si au départ vous avez : « Rc-taille < distance < Rc+taille », vous pouvez toujours élever au carré pour des raison de commodité et vous obtenez :

    Si vous voulez ramenez cela à une seule condition à tester, cela donne :

  9. #8
    antwan_astro

    Re : Cercle sur une sphère (python)

    SCANDALEUX !

    je m'en suis rendu compte en me relisant ... Je mets tout ça au carré puis je vais me cacher là où aucun scientifique ne pourra me lapider.

    Thank you

  10. #9
    bdom001

    Re : Cercle sur une sphère (python)

    Bah, l'essentiel c'est que votre situation se soit débloquée ...

Discussions similaires

  1. Quadrature du cercle et transformation du carré en cercle
    Par TullForix23 dans le forum Mathématiques du supérieur
    Réponses: 32
    Dernier message: 19/04/2013, 16h34
  2. Distance d'un point d'une sphère à un segment de Sphère
    Par invite1aebe580 dans le forum Mathématiques du supérieur
    Réponses: 2
    Dernier message: 26/11/2008, 15h37
  3. Cercle et Sphere sachant deux points diamétralement opposés
    Par invite30e287da dans le forum Mathématiques du supérieur
    Réponses: 8
    Dernier message: 21/07/2008, 22h40
  4. Déterminer le centre d'un cercle par l'équation du cercle et un point
    Par invite1dde008b dans le forum Mathématiques du collège et du lycée
    Réponses: 11
    Dernier message: 09/03/2007, 20h30
  5. superficie d'une sphère via intégrale de cercle
    Par invite69dafe8b dans le forum Mathématiques du supérieur
    Réponses: 2
    Dernier message: 24/04/2004, 15h49