Fichier:Symmetrical 5-set Venn diagram.svg

Fichier d’origine(Fichier SVG, nominalement de 512 × 512 pixels, taille : 4 kio)

Ce fichier et sa description proviennent de Wikimedia Commons.

 
W3C-validity not checked.

Description

Description
English: Radially-symmetrical five-set Venn diagram devised by Branko Grünbaum
Source Travail personnel
Auteur Cmglee

Python script to optimise for maximum area of the smallest regions

#!/usr/bin/env python
import math

class Ellipse:
 def __init__(self, x,y, rx,ry):
  self.x  = x
  self.y  = y
  self.rx = rx
  self.ry = ry

class Matrix:
 def __init__(self, ellipse):
  self.half_width  = max(int(math.ceil(ellipse.rx + ellipse.x) + 1),
                         int(math.ceil(ellipse.ry + ellipse.y) + 1))
  self.half_height = self.half_width
  self.width       = self.half_width * 2
  self.height      = self.half_height * 2
  self.cells       = [[0 for x in range(self.width)] for y in range(self.height)]
 def display(self):
  codes = '0123456789abcdefghijklmnopqrstuvwxyz'
  print('\n'.join([''.join([codes[self.cells[y][x]] for x in range(self.width)])
                                                    for y in range(self.height)]))
 def draw_ellipse(self, i_bit, ellipse, angle):
  mask_bit  = (1 << i_bit)
  sin_angle = math.sin(math.radians(angle))
  cos_angle = math.cos(math.radians(angle))
  for matrix_y in range(self.height):
   for matrix_x in range(self.width):
    cell_x_unrotated = matrix_x - self.half_width
    cell_y_unrotated = matrix_y - self.half_height
    cell_x = sin_angle * cell_y_unrotated + cos_angle * cell_x_unrotated
    cell_y = cos_angle * cell_y_unrotated - sin_angle * cell_x_unrotated
    cell_dx = float(cell_x - ellipse.x) / ellipse.rx
    cell_dy = float(cell_y - ellipse.y) / ellipse.ry
    # print('%3d%3d | %4d%4d | %6.2f%6.2f | %6.2f %d' %
    #       (matrix_x,matrix_y, cell_x,cell_y, cell_dx,cell_dy,
    #        cell_dx * cell_dx + cell_dy * cell_dy,cell_dx * cell_dx + cell_dy * cell_dy > 1))
    if (cell_dx * cell_dx + cell_dy * cell_dy <= 1): self.cells[matrix_y][matrix_x] |= mask_bit
 def draw_ellipses(self, ellipse):
  for i_ellipse in range(5): self.draw_ellipse(i_ellipse, ellipse, i_ellipse * 72)
 def count_regions(self):
  counts = [0 for code in range(1 << 5)]
  for matrix_y in range(self.height):
   for matrix_x in range(self.width):
    counts[self.cells[matrix_y][matrix_x]] += 1
  area_all  = self.width * self.height
  area_min  = area_all
  area_non0 = area_all - counts[0]
  for i_count in range(len(counts)):
   if (area_min > counts[i_count]): area_min = counts[i_count]
  if (True):
   # if (area_min > 0):
    bar = ''.join(['%-5d+----' % i for i in range(99)]).replace(' ','-')[1:]
    ppm = 1e6 * area_min / area_non0
    print('x:%2d y:%2d rx:%2d ry:%2d ppm:%4.0f %s' %
          (ellipse.x,ellipse.y, ellipse.rx,ellipse.ry, ppm, bar[:int(ppm / 100 + 0.5)]))
"""
ellipse = Ellipse(9,14, 40,80)
ellipse = Ellipse(7,16, 42,78)
ellipse = Ellipse(5,12, 46,70)
ellipse = Ellipse(5,14, 37,64)
ellipse = Ellipse(5,12, 40,65)
ellipse = Ellipse(5,12, 41,66)
ellipse = Ellipse(10,24, 82,132)
matrix  = Matrix(ellipse)
matrix.draw_ellipses(ellipse)
matrix.display()
matrix.count_regions()
"""
model_x  =  20; half_range_x  = 1; step_x  = 1
model_y  =  46; half_range_y  = 1; step_y  = 1
model_rx = 166; half_range_rx = 1; step_rx = 1
model_ry = 264; half_range_ry = 1; step_ry = 1
for    x  in range(-half_range_x , half_range_x  + 1, step_x ):
 for   y  in range(-half_range_y , half_range_y  + 1, step_y ):
  for  rx in range(-half_range_rx, half_range_rx + 1, step_rx):
   for ry in range(-half_range_ry, half_range_ry + 1, step_ry):
    ellipse = Ellipse(model_x + x,model_y + y, model_rx + rx,model_ry + ry)
    matrix  = Matrix(ellipse)
    matrix.draw_ellipses(ellipse)
    matrix.count_regions()
# """

Conditions d’utilisation

Moi, en tant que détenteur des droits d’auteur sur cette œuvre, je la publie sous la licence suivante :
w:fr:Creative Commons
paternité partage à l’identique
Ce fichier est disponible selon les termes de la licence Creative Commons Attribution – Partage dans les Mêmes Conditions 3.0 (non transposée).
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égendes

Ajoutez en une ligne la description de ce que représente ce fichier

É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à.

(les plus récentes | les plus anciennes) Voir (10 plus récentes | ) (10 | 20 | 50 | 100 | 250 | 500)
Date et heureVignetteDimensionsUtilisateurCommentaire
actuel16 avril 2019 à 02:17Vignette pour la version du 16 avril 2019 à 02:17512 × 512 (4 kio)CmgleeImprove optimisation and rendering.
14 octobre 2016 à 14:47Vignette pour la version du 14 octobre 2016 à 14:47512 × 512 (4 kio)CmgleeOptimise for maximum area of the smallest regions.
11 avril 2011 à 02:35Vignette pour la version du 11 avril 2011 à 02:35746 × 742 (3 kio)AnonMoosadjusting margins
12 mars 2011 à 00:09Vignette pour la version du 12 mars 2011 à 00:09512 × 512 (3 kio)CmgleeUse defs to make opaque lines.
11 mars 2011 à 23:49Vignette pour la version du 11 mars 2011 à 23:49512 × 512 (3 kio)CmgleeExplicitly specify font size.
11 mars 2011 à 23:42Vignette pour la version du 11 mars 2011 à 23:42512 × 512 (1 kio)CmgleeMake transparent fill attribute of ellipses.
11 mars 2011 à 23:40Vignette pour la version du 11 mars 2011 à 23:40512 × 512 (1 kio)CmgleeAdd opaque lines.
11 mars 2011 à 23:37Vignette pour la version du 11 mars 2011 à 23:37512 × 512 (1 017 octet)CmgleeUse fill with hex codes and opacity instead of fill with rgba codes.
11 mars 2011 à 23:34Vignette pour la version du 11 mars 2011 à 23:34512 × 512 (1 010 octet)CmgleeTemporarily remove text to check if ellipses work.
11 mars 2011 à 23:33Vignette pour la version du 11 mars 2011 à 23:33512 × 512 (3 kio)CmgleeConvert CSS styles to attributes.
(les plus récentes | les plus anciennes) Voir (10 plus récentes | ) (10 | 20 | 50 | 100 | 250 | 500)

La page suivante utilise ce fichier :

Usage global du fichier

Les autres wikis suivants utilisent ce fichier :

Métadonnées