Ficheiro:Pinna's illusory intertwining effect.gif

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

Imagem numa resolução maior(2 000 × 2 000 píxeis, tamanho: 64 kB, tipo MIME: image/gif)

Descrição do ficheiro

Descrição
English: Pinna's illusory intertwining effect, described in Pinna, B., Gregory, R.L. (2002). "Shifts of Edges and Deformations of Patterns". Perception 31: 1503-1508. and Pinna illusion (scholarpedia) Actually, the circles are concentric.
Data
Origem Obra do próprio
Autor Jochen Burghardt
Source code
typedef int xT;                      /* x coordinate */
typedef int yT;                      /* y coordinate */

#define pmWd            ((xT)2000)
#define pmHg            ((yT)2000)
#define pmX0            ((xT)pmWd/2)
#define pmY0            ((yT)pmHg/2)

static Pixmap pm;
static GC gcBlack;
static GC gcWhite;
static GC gcGrey;

static inline void rotatePoint(
    xT *xd,
    yT *yd,
    double al,
    xT xs,
    yT ys) 
{
    double const s = sin(al);
    double const c = cos(al);

    *xd = (xT)(xs * c - ys * s); 
    *yd = (yT)(xs * s + ys * c); 
}

static inline void doPinnaCircles(void)
{
    /* circle radiuses */
    double const rMin = 300.0;
    double const rInc = 200.0;
    double const rMax = 950;
    double r;
    /* square side length */
    double const S = 100.0;
    double const s = S * 0.7;
    double alInc = 2 * M_PI * 15 / 360;
    int i;

    XFillRectangle(dpy,pm,gcGrey,0,0,pmWd,pmHg);
    for (r=rMin; r <=rMax; r+=rInc) {
        /* currect radius such that an integer multiple of squares fits */
        double const p  = 2.0 * M_PI * r;
        int const cnt = floor(p/S/2.0) * 2;
        double const pc = cnt * S;
        xT const rc = (xT)(pc / 2.0 / M_PI);
        alInc = - alInc;
        for (i=0; i<cnt; i+=1) {
            /* angle to midpoint of i.th square */
            double const Al = 2.0 * M_PI * i / cnt;
            /* mid point of i.th square */
            xT const xx = pmX0 + (xT)(sin(Al) * rc);
            yT const yy = pmY0 + (yT)(cos(Al) * rc);
            /* edge angle of i.th square */
            double const al = Al + alInc;
            xT xa, xb, xc, xd;
            yT ya, yb, yc, yd;
            rotatePoint(&xa,&ya,-al,+s/2.0,+s/2.0);
            rotatePoint(&xb,&yb,-al,-s/2.0,+s/2.0);
            rotatePoint(&xc,&yc,-al,-s/2.0,-s/2.0);
            rotatePoint(&xd,&yd,-al,+s/2.0,-s/2.0);
            GC const gc = (i % 2 == 0 ? gcWhite : gcBlack);
            XDrawLine(dpy,pm,gc,xx+xa,yy+ya,xx+xb,yy+yb);
            XDrawLine(dpy,pm,gc,xx+xb,yy+yb,xx+xc,yy+yc);
            XDrawLine(dpy,pm,gc,xx+xc,yy+yc,xx+xd,yy+yd);
            XDrawLine(dpy,pm,gc,xx+xd,yy+yd,xx+xa,yy+ya);
        }
    }

    XImage * const im = XGetImage(dpy,pm,0,0,pmWd,pmHg,-1,ZPixmap);
    writePpmFile(stdout,"",im);                           /* library function to print XImage to FILE*, code not included here */
}

/* main() initializes Pixmap pm, and GC gcBlack, gcWhite, gcGrey using library functions, then calls doPinnaCircles(), code not included here */

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.

Data e horaMiniaturaDimensõesUtilizadorComentário
atual20h00min de 7 de novembro de 2013Miniatura da versão das 20h00min de 7 de novembro de 20132 000 × 2 000 (64 kB)Jochen BurghardtUser created page with UploadWizard

A seguinte página usa este ficheiro:

Utilização global do ficheiro

Metadados