25 votos

$\pi$ en $4$?

Estoy tratando de definir $\pi$ en $4$ por la colocación de una unidad de círculo dentro de un cuadrado, y restando las esquinas de la plaza.

circle-in-square.png

Estoy intentando utilizar la sumación para definir el área de una esquina, luego multiplicando eso por cuatro y resta de cuatro (la zona de la plaza)

Pensé que me lo imaginé, y he creado un programa para comprobar. La respuesta llegó a $\aprox 3.4$

No estoy seguro de si fue un error de programa, o si simplemente estoy haciendo un error de cálculo. Puede alguien por favor me llevan en la dirección correcta? Esto es lo que tengo ahora mismo:

$$\pi \aprox 4 \times \left(1-\sum\limits_{n=1}^{\infty}\frac{\left(\frac{2-\sqrt 2}{2}\right)^2}{2^{n-1}}\right)$$

Donde $\left(\frac{2-\sqrt2}{2}\right)^2$ es el área de la mayor esquina plaza y $2^{n-1}$ es el número de plazas.

EDITAR

Después de leer los comentarios me di cuenta de que yo no era muy clara con lo que yo estaba tratando de lograr, así que he creado un boceto que debe ilustrar lo que quiero.

24voto

user87023 Puntos 1

Como he mencionado en los comentarios, los tamaños de las plazas son un poco más complicado de lo que usted está esperando. No sé de una simple expresión para el tamaño de cada cuadrado, pero usted puede obtener cada una por resolver una ecuación cuadrática. Yo escribí un programa para hacerlo; atrae todas las plazas cuyos tamaños están por encima de un pequeño umbral. Aquí está el resultado. Espero que ayude!

Los detalles sobre el programa: para un punto $(0,0)\leq(x,y)\leq(1,1)$, queremos encontrar una plaza con un vértice en $(x,y)$ y el otro en la esfera de $x_0^2+y_0^2=1$. Escrito $b=y-x$, la condición de que los dos puntos que forman un cuadrado significa que $y_0=x_0+b$. Sustituyendo, obtenemos $2x_0^2+2bx_0+b^2-1=0$. La solución está dada por la ecuación cuadrática: $x_0=\frac14\left(-2b+\sqrt{4b^2-4(2)(b^2-1)}\right)$ y, a continuación, nos dan $y_0$ de $y_0=x_0+b$. Ahora dibuja el cuadrado de entre $(x,y)$ y $(x_0,y_0)$ y repita el proceso de cada uno de los puntos $(x,y_0)$ y $(x_0,y)$.

Aquí un poco de código C++ para generar un SVG fragmento:

using namespace std;

void box(double x1, double y1, double x2, double y2, int level)
{
    cout
    << "<rect x=\"" << min(x1, x2)
    << "\" y=\"" << min(y1, y2)
    << "\" width=\"" << abs(x1-x2)
    << "\" height=\"" << abs(y1-y2)
    << "\"";

    switch (level % 3)
    {
        case 0: cout << " fill=\"red\""; break;
        case 1: cout << " fill=\"green\""; break;
        case 2: cout << " fill=\"blue\""; break;
    }

    cout << " />" << endl;
}

void boxes(double x1, double y1, double x2, double y2, int level)
{
    double r = 300.0;

    x1 *= r;
    y1 *= r;
    x2 *= r;
    y2 *= r;

    box(r+x1,r+y1,r+x2,r+y2, level);
    box(r+x1,r-y1,r+x2,r-y2, level);
    box(r-x1,r+y1,r-x2,r+y2, level);
    box(r-x1,r-y1,r-x2,r-y2, level);
}

void advance(double x, double y, double& ox, double& oy)
{
    const float b = y - x;
    ox = (-2*b + sqrt(4*b*b - 8*(b*b-1))) / 4;
    oy = ox + b;
}

void drawlevel(int level, double x, double y)
{
    double ox, oy;
    advance(x, y, ox, oy);
    boxes(x, y, ox, oy, level);

    if (abs(x-ox) > 0.0004)
    {
        drawlevel(level + 1, x, oy);
        drawlevel(level + 1, ox, y);
    }
}

int main()
{
    drawlevel(0, 1, 1);
}

0voto

M. Travis Volker Puntos 807

Su manera de llenar las esquinas solo (tan lejos como puedo ver) una parte triangular de ellos.

Va a ser duro para llenarlos con cuadrados.

Chris dice el mismo en su comentario, excepto que, en realidad, él trata de decirle lo que usted podría hacer (y él cogió usted miscounting en el número de cuadrados más pequeños en cada paso).

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X