O ladrilhar de uma esfera com triângulos

#192

Com a biblioteca

class Plotar;

ago­ra irei ana­li­zar for­mas de ladri­lhar (em inglês, tiling) uma esfe­ra com triângulos.
O obje­ti­vo: um ladri­lhar tão regu­lar quan­to possível.

Medidas de regularidade

Antes de tudo, devo defi­nir métri­cas para ter noção do que é regularidade.
Deve­mos ter noção de fun­ções de Médi­as e de Vari­ân­ci­as / Desvios.

Média, Variância e Desvio Padrão

Média \overline x, Vari­ân­cia \sigma^2_x e Des­vio Padrão \sigma_x

Como é a fun­ção da Média Aritmética?

$$\verb|Ma| \circ \vec x = \dfrac{\sum_i x_i}{\# \vec x}\rightarrow \over­li­ne x$$

Se $$\# \vec x = 2$$, então $$\over­li­ne x = \frac{x + y}{2}$$.

E as medi­das de dis­per­são dos valo­res com rela­ção a Média?

d_i^2 = (x_i - \overline x)^2 é o des­vio do valor x_i.

A vari­ân­cia (vari­ân­cia de amos­tra) é dada por:

$$\sigma^2 = \dfrac{\sum_i d^2_i}{\# \vec x – 1}$$

Já o des­vio padrão, é sim­ples­men­te $$\sig­ma$$.

Mas exis­tem Médi­as dife­ren­tes a serem abor­da­das, pois podem rela­tar rela­ci­o­na­men­tos entre os dados que outras Médi­as não podem.

Construção de uma função de média

Como já conhe­mos a Média Arit­mé­ti­ca, veja­mos como cons­truir outras Médi­as a par­tir des­ta. Para tal, basta:

  1. Ter­mos uma fun­ção f\circ x, para mape­ar­mos os valo­res do vetor \vec x para outro domínio
  2. Ope­rar­mos a Média Arit­mé­ti­ca des­tes novos valo­res transformados
  3. E então retor­nar­mos ao domí­nio ori­gi­nal com f\overset{_{-1}}{\circ}x (infor­mal­men­te, x\circ f, a rever­sa de f\circ x).

E então:

$$\verb|M| _f \circ \vec x = f\overset{_{-1}}{\circ}\left[\dfrac{\sum_i f(x_i)}{\# \vec x}\right] \righ­tar­row \over­li­ne x$$

$$d_{f,i} = f(x_i) – f(\overline x)$$

$$\sigma^2_f = \dfrac{\sum_i [f(x_i) – f(\overline x)]^2}{\# \vec x – 1}$$

Veja­mos exemplos:

Caso 1:

Seja f a invo­lu­ção \frac{1}{x}, e tere­mos a Média Hiperbólica:

$$\verb|M| _{1\over x} \circ \vec x
= \dfrac{1}{x}\circ\left[\dfrac{\sum_i {1\over x}\circ x_i}{\# \vec x}\right]
= \dfrac{\# \vec x}{\sum_i {1\over x_i}}
= \verb|Mh|\circ\vec x$$

$$d_{{1\over x},j}
= {1\over x_j} – \dfrac{\sum_i {1\over x_i}}{\# \vec x}
= \dfrac{\# \vec x – x_j\sum_i {1\over x_i}}{x_j \# \vec x}$$

Caso 2:

Seja f a fun­ção x^2, e tere­mos a Média Quadrática:

$$\verb|M| _{x^2} \circ \vec x
= \sqrt{x}\circ\left[\dfrac{\sum_i x^2\circ x_i}{\# \vec x}\right]
= \sqrt{\dfrac{\sum_i x^2_i}{\# \vec x}}
= \verb|Mq|\circ\vec x$$

$$d_{x^2,j}
= x^2_j – \dfrac{\sum_i x^2_i}{\# \vec x}
= \dfrac{x^2_j \# \vec x – \sum_i x^2_i}{\# \vec x}$$

Caso 3:

Seja f a fun­ção \ln x, e tere­mos a Média Geométrica:

$$\verb|M| _{\ln x} \circ \vec x
= \exp x\circ\left[\dfrac{\sum_i \ln x\circ x_i}{\# \vec x}\right]
= \exp \left[\dfrac{\sum_i \ln x_i}{\# \vec x}\right]
= \left[ \prod_i x_i\right ]^{1\over \# \vec x}
= \verb|Mg|\circ\vec x$$

$$d_{\ln x,j}
= \ln x_j – \dfrac{\sum_i \ln x_i}{\# \vec x}
= \dfrac{\# \vec x \ln x_j – \sum_i \ln x_i}{\# \vec x}
= \dfrac{\ln x^{\# \vec x}_j – \ln\prod_i x_i}{\# \vec x}$$

Caso 4:

Seja f a fun­ção \exp x, e tere­mos outra média:

$$\verb|M| _{\exp x} \circ \vec x
= \ln x\circ\left[\dfrac{\sum_i \exp x\circ x_i}{\# \vec x}\right]
= \ln \left[\dfrac{\sum_i \exp x_i}{\# \vec x}\right]$$

$$d_{\exp x,j}
= \exp x_j – \dfrac{\sum_i \exp x_i}{\# \vec x}
= \dfrac{\exp x_j\cdot\# \vec x – \sum_i \exp x_i}{\# \vec x}$$

Comparação entre distância poligonal e geodésica

Sejam $$\vec p$$ e $$\vec q$$ dois pon­tos / vetores.
Em um espa­ço pla­no, entre dois pon­tos a dis­tân­cia é dada por $$||\vec p – \vec q||$$.
Em uma geo­dé­si­ca de uma esfe­ra, a menor dis­tân­cia é a que com­pre­en­de um cír­cu­lo máxi­mo ao redor da esfe­ra, e seu valor é dado por $$r \the­ta$$, com $$r$$ sen­do o raio dos pon­tos $$\vec p$$ e $$\vec q$$ em rela­ção ao cen­tro da esfe­ra, e $$\the­ta = \arccos(\hat{p} \cdot \hat{q}) = \cos \overset{-1}{\circ} (\hat{p} \cdot \hat{q})$$.

Ten­do o raio como uni­tá­rio, temos:

Dis­tân­cia euclidiana:
$$||\vec{p} – \vec{q}|| = ||p_x – q_x; p_y – q_y; p_z – q_z|| = \sqrt{(p_x – q_x)^2 + (p_y – q_y)^2 + (p_z – q_z)^2}$$

Dis­tân­cia esférica:
$$r\theta = \cos \overset{_{-1}}{\circ} (\hat{p} \cdot \hat{q}) = \cos \overset{_{-1}}{\circ} (p_x q_x + p_y q_y + p_z q_z)$$

Razão entre as distâncias:
$$\dfrac{||\vec p – \vec q||}{\cos \overset{_{-1}}{\circ} \hat p \cdot \hat q}$$

Em JS:

class Pontos{
    // Ângulo
    static ângulo(p, q){
        let t = Math.acos(
            p.versor().escalar(q.versor())
        );
        return t + (t < 0 ? 2 * Math.PI : 0);
    }
    // Distância Euclidiana
    static distância_euclidiana(p, q){
        return p.menos(q).módulo;
    }
    // Distância Polar
    static distância_polar(p, q){
        let r = p.módulo;
        return r * this.ângulo(p, q);
    }
}

Formas do ladrilhar

Pri­mei­ro, deve­mos ladri­lhar a esfe­ra com tri­ân­gu­los “gran­des”, e então subs­ti­tuir cada tri­ân­gu­lo por qua­tro tri­ân­gu­los, como na estru­tu­ra pla­ni­fi­ca­da de um tetra­e­dro, ou uma tri­for­ce.
Lem­bran­do que, mais faces impli­cam em uma mai­or pro­xi­mi­da­de para com a esfe­ra, já que esta é o limi­te da equa­ção, onde temos “infi­ni­tas faces”.

$$\verb|Esfera| = \displaystyle\lim_{\verb|#Faces|\to\infty} \text{Cj. de } \left\{\verb|Faces|\right\}$$

Regulares

As for­mas exis­ten­tes de se ladri­lhar uma esfe­ra com tri­ân­gu­los regu­la­res são:

  • Tetra­e­dro, com 4 faces
  • Octa­e­dro, com 8 faces
  • Ico­sa­e­dro, com 20 faces

Semi-regulares

Exis­tem tam­bém os ladri­lha­res semi-regu­la­res, em que os tri­ân­gu­los não são tri­ân­gu­los regu­la­res $$(\angle=180^\circ)$$, mas são todos da mes­ma for­ma­ção (mes­ma área e mes­mo con­jun­to de ângu­los). Por exem­plo, algu­ma for­ma­ção com tri­ân­gu­los isós­ce­les, em que todos os tri­ân­gu­los são iguais.

Irregulares

For­ma­ções em que, ou as áre­as, ou o con­jun­to de ângu­los são irregulares.

Pontos

Ago­ra que defi­ni­mos tudo o que vamos tes­tar e como, con­vém defi­nir­mos nos­sos pon­tos em mate­má­ti­ca e em código!

Em mate­má­ti­ca, cada pon­to $$\vec p$$ obe­de­ce: $$||\vec p|| = 1$$ e $$\vec p\in \left[- 1; 1\right[^3$$.

Em códi­go:

class Ponto{
    #x = 0; #y = 0; #z = 0;
    constructor(x, y, z){
        this.#x = x
        this.#y = y
        this.#z = z
    }
    get data(){
        return #[#x, #y, #z]
    }
    get módulo(){
        return Math.hypot(#x, #y, #z)
    }
    mais(q){
        return new Ponto(#x + q.#x, #y + q.#y, #z + q.#z)
    }
    menos(q){
        return new Ponto(#x - q.#x, #y - q.#y, #z - q.#z)
    }
    escalar(q){
        return #x * q.#x + #y * q.#y + #z * q.#z
    }
    mult(k){
        return new Ponto(k * #x, k * #y, k * #z)
    }
    versor(){
        return this.mult(1 / this.módulo)
    }
}