Bertrandův paradox¶

In [9]:
import numpy as np
import matplotlib.pyplot as plt
In [10]:
#vykreslení kružnice
#budeme předpokládat, že poloměr kružnice je 1
def circle():
phi=np.linspace(0,2*np.pi,1000)
x=np.cos(phi)
y=np.sin(phi)
return(x,y)
Metoda 1¶

In [11]:
#metoda 1 - náhodně zvolíme dva body na kružnici a jejich spojnice bude sečna
def chord1():
phi1=2*np.pi*np.random.random()
x1=np.cos(phi1)
y1=np.sin(phi1)
phi2=2*np.pi*np.random.random()
x2=np.cos(phi2)
y2=np.sin(phi2)
return(x1,y1,x2,y2) #souřadnice koncových bodů sečny
Metoda 2¶

In [12]:
#metoda 2 - zvolíme poloměr v náhodném směru a na něm náhodně zvolíme bod, sečna bude kolmice procházející tímto bodem
def chord2():
alpha=2*np.pi*np.random.random()
rc=np.random.random()
beta=np.arccos(rc)
phi1=alpha+beta
x1=np.cos(phi1)
y1=np.sin(phi1)
phi2=alpha-beta
x2=np.cos(phi2)
y2=np.sin(phi2)
return(x1,y1,x2,y2) #souřadnice koncových bodů sečny
Metoda 3¶

In [13]:
#metoda 3 - náhodně zvolíme bod uvnitř kružnice a to bude střed sečny
def chord3():
rc=2
while rc>1: #bod musí být uvnitř kružnice
xc=2*np.random.random()-1
yc=2*np.random.random()-1
rc=np.sqrt(xc**2+yc**2)
alpha=np.arctan(yc/xc)
if xc<0:
alpha+=np.pi
beta=np.arccos(rc)
phi1=alpha+beta
x1=np.cos(phi1)
y1=np.sin(phi1)
phi2=alpha-beta
x2=np.cos(phi2)
y2=np.sin(phi2)
return(x1,y1,x2,y2) #souřadnice koncových bodů sečny
In [14]:
N_repeat=1000 #počet generovaných sečen
xc=[] #x-ová souřadnice středu sečny
yc=[] #y-ová souřadnice středu sečny
fig,ax=plt.subplots(1,2,figsize=(13,6))
x,y=circle() #vykreslení kružnice
ax[0].plot(x,y,lw=3)
ax[1].plot(x,y,lw=3)
for i in range(N_repeat):
x1,y1,x2,y2=chord1() #vykreslení sečen
ax[0].plot([x1,x2],[y1,y2],c='grey',lw=0.2)
xc=np.append(xc,(x1+x2)/2) #to je pro rychlejší běh středy sečen vykreslíme najednou po doběhnutí cyklu
yc=np.append(yc,(y1+y2)/2)
ax[0].set_xlabel('x')
ax[0].set_ylabel('y')
ax[0].set_title("metoda 1 - sečny")
ax[1].scatter(xc,yc,c='grey',s=1)
ax[1].set_xlabel('x')
ax[1].set_ylabel('y')
ax[1].set_title("metoda 1 - středy sečen")
plt.show()
In [15]:
xc=[] #x-ová souřadnice středu sečny
yc=[] #y-ová souřadnice středu sečny
fig,ax=plt.subplots(1,2,figsize=(13,6))
x,y=circle() #vykreslení kružnice
ax[0].plot(x,y,lw=3)
ax[1].plot(x,y,lw=3)
for i in range(N_repeat):
x1,y1,x2,y2=chord2() #vykreslení sečen
ax[0].plot([x1,x2],[y1,y2],c='grey',lw=0.2)
xc=np.append(xc,(x1+x2)/2) #to je pro rychlejší běh středy sečen vykreslíme najednou po doběhnutí cyklu
yc=np.append(yc,(y1+y2)/2)
ax[0].set_xlabel('x')
ax[0].set_ylabel('y')
ax[0].set_title("metoda 2 - sečny")
ax[1].scatter(xc,yc,c='grey',s=1)
ax[1].set_xlabel('x')
ax[1].set_ylabel('y')
ax[1].set_title("metoda 2 - středy sečen")
plt.show()
In [16]:
xc=[] #x-ová souřadnice středu sečny
yc=[] #y-ová souřadnice středu sečny
fig,ax=plt.subplots(1,2,figsize=(13,6))
x,y=circle() #vykreslení kružnice
ax[0].plot(x,y,lw=3)
ax[1].plot(x,y,lw=3)
for i in range(N_repeat):
x1,y1,x2,y2=chord3() #vykreslení sečen
ax[0].plot([x1,x2],[y1,y2],c='grey',lw=0.2)
xc=np.append(xc,(x1+x2)/2) #to je pro rychlejší běh středy sečen vykreslíme najednou po doběhnutí cyklu
yc=np.append(yc,(y1+y2)/2)
ax[0].set_xlabel('x')
ax[0].set_ylabel('y')
ax[0].set_title("metoda 3 - sečny")
ax[1].scatter(xc,yc,c='grey',s=1)
ax[1].set_xlabel('x')
ax[1].set_ylabel('y')
ax[1].set_title("metoda 3 - středy sečen")
plt.show()
In [ ]: