Ficheiro:Mrs Miniver's Problem.svg

O conteúdo da página não é suportado noutras línguas.
Origem: Wikipédia, a enciclopédia livre.

Imagem numa resolução maior(ficheiro SVG, de 900 × 348 píxeis, tamanho: 793 byte)

Descrição do ficheiro

Descrição
English: Three instances of Mrs. Miniver's problem, of arranging two circles so that their area of overlap equals the area of their symmetric difference. In each case the inner yellow area equals the total area of the surrounding blue regions. The left case shows two circles of equal areas, the right case shows one circle with twice the area of the other, and the middle case is intermediate between these two.
Data
Origem Obra do próprio
Autor David Eppstein

Licenciamento

Eu, titular dos direitos de autor desta obra, publico-a com a seguinte licença:
Creative Commons CC-Zero A utilização deste ficheiro é regulada nos termos Creative Commons - CC0 1.0 Dedicação Universal ao Domínio Público.
A pessoa que associou uma obra a este documento dedicou-a ao domínio público, renunciando a todos os seus direitos sobre a obra em todo o mundo ao abrigo da legislação de direitos de autor, incluindo a todos os direitos legais conexos, na medida permitida por lei. Pode copiar, modificar, distribuir e executar a obra, até com fins comerciais, sem pedir autorização.

Source code

from math import pi,asin,sin,cos,acos
from PADS.SVG import *
import sys

# Circular segment formulas from https://en.wikipedia.org/wiki/Circular_segment

def areaFromRadius(r): return pi*r**2

def twoCircleArea(r1,r2): return areaFromRadius(r1)+areaFromRadius(r2)

def angleFromChord(r,c):
    return 2*asin(c/(2*r))

def areaFromAngle(r,theta):
    return r**2*(theta-sin(theta))/2

def areaFromChord(r,c):
    theta = angleFromChord(r,c)
    return areaFromAngle(r,theta)

def distanceToChord(r,c):
    theta = angleFromChord(r,c)
    return r*cos(theta/2)

def separationFromChord(r1,r2,c):
    return distanceToChord(r1,c)+distanceToChord(r2,c)

# Bisection to solve Mrs. Miniver's problem within floating point accuracy

def miniverSeparation(r1,r2):
    if r1 > r2: r1,r2 = r2,r1   # make sure small circle first
    totalArea = twoCircleArea(r1,r2)
    targetArea = totalArea/3

    def miniverTest(x):
        # x = cos(chord on small circle), -1: outside, 1: inside
        chord = 2*r1*sin(acos(x))
        area1 = areaFromChord(r1,chord)
        if x > 0:
            area1 = areaFromRadius(r1) - area1
        area2 = areaFromChord(r2,chord)
        return area1 + area2 < targetArea

    lo,hi = -1.0,1.0
    for i in range(100):
        mid = (hi+lo)/2
        if miniverTest(mid):
            lo = mid
        else:
            hi = mid
    chord = 2*r1*sin(acos(mid))
    return distanceToChord(r2,chord) - r1*mid

# Make it into a nice picture
# Monochromatic and with a loose frame for now; we'll fix it up later

gridUnit = 150
targetArea = 100000.0
boundingBox = (6+4j)*gridUnit
output = SVG(boundingBox,sys.stdout)
output.group(fill="none",stroke="#000")

for i in (0,1,2):
    ratio = 2.0**(i*0.25)
    areaWhenSmall = twoCircleArea(1.0,ratio)
    factor = (targetArea/areaWhenSmall)**0.5
    r1,r2 = factor,factor*ratio
    s = miniverSeparation(r1,r2)
    o = (1+2j+2*i)*gridUnit
    output.circle(o + (s+r2-r1)*0.5j, r1)
    output.circle(o - (s+r1-r2)*0.5j, r2)
  
output.ungroup()
output.close()

Legendas

Adicione uma explicação de uma linha do que este ficheiro representa
Three instances of Mrs. Miniver's Problem

Elementos retratados neste ficheiro

retrata

image/svg+xml

Histórico do ficheiro

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

Data e horaMiniaturaDimensõesUtilizadorComentário
atual19h35min de 29 de maio de 2022Miniatura da versão das 19h35min de 29 de maio de 2022900 × 348 (793 byte)David EppsteinKeep outer circles as circles for tighter svg coding; should be no visible change
06h48min de 29 de maio de 2022Miniatura da versão das 06h48min de 29 de maio de 2022900 × 348 (1 kB)David EppsteinUploaded own work with UploadWizard

A seguinte página usa este ficheiro:

Utilização global do ficheiro

As seguintes wikis usam este ficheiro:

Metadados