Ficheiro:Symmetrical 5-set Venn diagram.svg

Imagem numa resolução maior (ficheiro SVG, de 512 × 512 píxeis, tamanho: 4 kB)

 
W3C-validity not checked.

Descrição do ficheiro

Descrição
English: Radially-symmetrical five-set Venn diagram devised by Branko Grünbaum
Origem Obra do próprio
Autor 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()
# """

Licenciamento

Eu, titular dos direitos de autor desta obra, publico-a com a seguinte licença:
w:pt:Creative Commons
atribuição partilha nos termos da mesma licença
A utilização deste ficheiro é regulada nos termos da licença Creative Commons - Atribuição-CompartilhaIgual 3.0 Não Adaptada.
Pode:
  • partilhar – copiar, distribuir e transmitir a obra
  • recombinar – criar obras derivadas
De acordo com as seguintes condições:
  • atribuição – Tem de fazer a devida atribuição da autoria, fornecer uma hiperligação para a licença e indicar se foram feitas alterações. Pode fazê-lo de qualquer forma razoável, mas não de forma a sugerir que o licenciador o apoia ou subscreve o seu uso da obra.
  • partilha nos termos da mesma licença – Se remisturar, transformar ou ampliar o conteúdo, tem de distribuir as suas contribuições com a mesma licença ou uma licença compatível com a original.

Legendas

Adicione uma explicação de uma linha do que este ficheiro representa

Elementos retratados neste ficheiro

retrata

Histórico do ficheiro

Clique uma data e hora para ver o ficheiro tal como ele se encontrava nessa altura.

(Mais recentes | Mais antigas) Ver (10 posteriores | ) (10 | 20 | 50 | 100 | 250 | 500)
Data e horaMiniaturaDimensõesUtilizadorComentário
atual00h17min de 16 de abril de 2019Miniatura da versão das 00h17min de 16 de abril de 2019512 × 512 (4 kB)CmgleeImprove optimisation and rendering.
12h47min de 14 de outubro de 2016Miniatura da versão das 12h47min de 14 de outubro de 2016512 × 512 (4 kB)CmgleeOptimise for maximum area of the smallest regions.
00h35min de 11 de abril de 2011Miniatura da versão das 00h35min de 11 de abril de 2011746 × 742 (3 kB)AnonMoosadjusting margins
22h09min de 11 de março de 2011Miniatura da versão das 22h09min de 11 de março de 2011512 × 512 (3 kB)CmgleeUse defs to make opaque lines.
21h49min de 11 de março de 2011Miniatura da versão das 21h49min de 11 de março de 2011512 × 512 (3 kB)CmgleeExplicitly specify font size.
21h42min de 11 de março de 2011Miniatura da versão das 21h42min de 11 de março de 2011512 × 512 (1 kB)CmgleeMake transparent fill attribute of ellipses.
21h40min de 11 de março de 2011Miniatura da versão das 21h40min de 11 de março de 2011512 × 512 (1 kB)CmgleeAdd opaque lines.
21h37min de 11 de março de 2011Miniatura da versão das 21h37min de 11 de março de 2011512 × 512 (1 017 byte)CmgleeUse fill with hex codes and opacity instead of fill with rgba codes.
21h34min de 11 de março de 2011Miniatura da versão das 21h34min de 11 de março de 2011512 × 512 (1 010 byte)CmgleeTemporarily remove text to check if ellipses work.
21h33min de 11 de março de 2011Miniatura da versão das 21h33min de 11 de março de 2011512 × 512 (3 kB)CmgleeConvert CSS styles to attributes.
(Mais recentes | Mais antigas) Ver (10 posteriores | ) (10 | 20 | 50 | 100 | 250 | 500)

A seguinte página usa este ficheiro:

Utilização global do ficheiro

Metadados