Fichier:Valeriepieris_circle_azimuthal_equal_area.png
De Wikipedia, l'encyclopédie encyclopedia
Taille de cet aperçu : 600 × 600 pixels. Autres résolutions : 240 × 240 pixels | 480 × 480 pixels | 768 × 768 pixels | 1 024 × 1 024 pixels.
Fichier d’origine (1 024 × 1 024 pixels, taille du fichier : 1,16 Mio, type MIME : image/png)
Ce fichier et sa description proviennent de Wikimedia Commons.
Description
DescriptionValeriepieris circle azimuthal equal area.png |
English: Danny Quah's Valerispieris circle on a globe model, centred on Mong Khet, Myanmar, rendered in azimuthal equal-area projection from the equirectangular projection from http://commons.wikimedia.org/wiki/File:Earthmap1000x500.jpg by CMG Lee.
The fraction of the area of circle to that of the globe is equal to its equivalent on Earth. |
|||
Date | upload 25. Oct. 2005 | |||
Source |
|
|||
Auteur | cmglee, jimht at shaw dot ca | |||
Autres versions |
|
Python source
#!/usr/bin/env python
import re, math, png
path_in = 'mya/Earthmap1000x500.png'
path_out = 'Valeriepieris_circle_azimuthal_equal_area.png'
colour_circle = [255, 255, 0]
radius_circle = 0.51
thickness_circle = 0.01
lat_centre = 21.7
long_centre = 99.383333
zoom = 0.5
# zoom = 0.33
# out_size = 512
out_size = 2048
out_size_half = out_size * 0.5
class Png:
def __init__(self, path_in):
(self.width, self.height, self.pixels, self.metadata) = png.Reader(path_in).read_flat()
self.planes = self.metadata['planes']
def __str__(self): return str((self.width, self.height, len(self.pixels), self.metadata))
def write(self, path_out):
png.Writer(width=self.width, height=self.height,
bitdepth=self.metadata['bitdepth'], interlace=self.metadata['interlace'],
planes=self.metadata['planes'], greyscale=self.metadata['greyscale'],
alpha=self.metadata['alpha']).write_array(open(path_out, 'wb'), self.pixels)
## Formula from http://mathworld.wolfram.com/AzimuthalEquidistantProjection.html
def azimuthal_equidistant_to_equirectangular(x, y, lat_centre, long_centre):
c = math.hypot(x, y)
if c == 0 or (abs(lat_centre) == 90 and y == 0): return (0, 0)
sin_c = math.sin(c)
cos_c = math.cos(c)
lat_centre_rad = math.radians(lat_centre)
sin_lat_centre = math.sin(lat_centre_rad)
cos_lat_centre = math.cos(lat_centre_rad)
to_asin = cos_c * sin_lat_centre + y * sin_c * cos_lat_centre / c
if abs(to_asin) > 1: return (0, 0)
lat = math.degrees(math.asin(to_asin))
long = (math.degrees(math.atan2(-x, y) if lat_centre == 90 else
math.atan2( x, y) if lat_centre == -90 else
math.atan2(x * sin_c, c * cos_lat_centre * cos_c -
y * sin_lat_centre * sin_c)) +
long_centre + 540) % 360 - 180 ## +540%360-180 to make range [-180,180)
return (lat, long)
## From http://mathworld.wolfram.com/LambertAzimuthalEqual-AreaProjection.html
def azimuthal_equal_area_to_equirectangular(x, y, lat_centre, long_centre):
rho = math.hypot(x, y)
if rho == 0 or (abs(lat_centre) == 90 and y == 0) or abs(rho * 0.5) > 1:
return (None, None)
c = 2 * math.asin(rho * 0.5)
sin_c = math.sin(c)
cos_c = math.cos(c)
lat_centre_rad = math.radians(lat_centre)
sin_lat_centre = math.sin(lat_centre_rad)
cos_lat_centre = math.cos(lat_centre_rad)
to_asin = cos_c * sin_lat_centre + y * sin_c * cos_lat_centre / rho
if abs(to_asin) > 1: return (None, None)
lat = math.degrees(math.asin(to_asin))
long = (math.degrees(math.atan2(x * sin_c, rho * cos_lat_centre * cos_c -
y * sin_lat_centre * sin_c)) +
long_centre + 540) % 360 - 180 ## +540%360-180 to make range [-180,180)
return (lat, long)
png_in = Png(path_in)
print(png_in)
print(png_in.pixels[:20])
png_out = Png(path_in) ## copy most of original's metadata
png_out.width = png_out.height = out_size
png_out.pixels = [0] * (png_out.width * png_out.height)
print(png_out)
for out_y in range(out_size):
for out_x in range(out_size):
x = (out_x / out_size_half - 1) / zoom
y = (out_y / out_size_half - 1) / -zoom
if abs(math.hypot(x,y) - radius_circle) < thickness_circle * zoom:
colour = colour_circle
else:
# (lat, long) = azimuthal_equidistant_to_equirectangular(x, y, lat_centre, long_centre)
(lat, long) = azimuthal_equal_area_to_equirectangular(x, y, lat_centre, long_centre)
if lat is None or long is None:
colour = [0] * png_out.planes
else:
in_y = int(png_in.height * ( 90 - lat ) / 180.0)
in_x = int(png_in.width * (180 + long) / 360.0)
in_offset = (in_y * png_in.width + in_x ) * png_in .planes
colour = png_in.pixels[in_offset :in_offset + png_in.planes]
out_offset = (out_y * out_size + out_x) * png_out.planes
png_out.pixels[out_offset:out_offset + png_out.planes] = colour
png_out.write(path_out)
Conditions d’utilisation
Moi, en tant que détenteur des droits d’auteur sur cette œuvre, je la publie sous la licence suivante :
Ce fichier est sous la licence Creative Commons Attribution – Partage dans les Mêmes Conditions 4.0 International.
- Vous êtes libre :
- de partager – de copier, distribuer et transmettre cette œuvre
- d’adapter – de modifier cette œuvre
- Sous les conditions suivantes :
- paternité – Vous devez donner les informations appropriées concernant l'auteur, fournir un lien vers la licence et indiquer si des modifications ont été faites. Vous pouvez faire cela par tout moyen raisonnable, mais en aucune façon suggérant que l’auteur vous soutient ou approuve l’utilisation que vous en faites.
- partage à l’identique – Si vous modifiez, transformez, ou vous basez sur cette œuvre, vous devez distribuer votre contribution sous la même licence ou une licence compatible avec celle de l’original.
Éléments décrits dans ce fichier
dépeint
Historique du fichier
Cliquer sur une date et heure pour voir le fichier tel qu'il était à ce moment-là.
Date et heure | Vignette | Dimensions | Utilisateur | Commentaire | |
---|---|---|---|---|---|
actuel | 20 janvier 2024 à 10:04 | 1 024 × 1 024 (1,16 Mio) | Cmglee | Uploaded own work with UploadWizard |
Utilisation du fichier
La page suivante utilise ce fichier :
Usage global du fichier
Les autres wikis suivants utilisent ce fichier :
- Utilisation sur de.wikipedia.org
- Utilisation sur en.wikipedia.org
- Utilisation sur es.wikipedia.org
- Utilisation sur id.wikipedia.org
- Utilisation sur pt.wikipedia.org
- Utilisation sur vi.wikipedia.org
- Utilisation sur zh.wikipedia.org
Métadonnées
Ce fichier contient des informations supplémentaires, probablement ajoutées par l'appareil photo numérique ou le numériseur utilisé pour le créer.
Si le fichier a été modifié depuis son état original, certains détails peuvent ne pas refléter entièrement l'image modifiée.
Résolution horizontale | 28,34 pt/cm |
---|---|
Résolution verticale | 28,34 pt/cm |
Ce document provient de « https://fr.wikipedia.org/wiki/Fichier:Valeriepieris_circle_azimuthal_equal_area.png ».