Ficheiro:Pi archi approx.svg

Imagem numa resolução maior (ficheiro SVG, de 1 000 × 180 píxeis, tamanho: 6 kB)

Descrição do ficheiro

Descrição
English: Approximation to Pi by Archimedes' method
Français : Approximation de Pi par la méthode d'Archimède
Polski: Metoda Archimedesa aproksymacji Pi
Español: Método de aproximación del número π de Arquímedes.
Data
Origem Obra do próprio
Autor Guillaume Jacquenot
Outras versões

Obras derivadas deste ficheiro:  Pi archi approx inter.svg

Archimedes_pi.svg

Licenciamento

Eu, titular dos direitos de autor desta obra, publico-a com as seguintes licenças:
GNU head É concedida permissão para copiar, distribuir e/ou modificar este documento nos termos da Licença de Documentação Livre GNU, versão 1.2 ou qualquer versão posterior publicada pela Free Software Foundation; sem Secções Invariantes, sem textos de Capa e sem textos de Contra-Capa. É incluída uma cópia da licença na secção intitulada GNU Free Documentation License.
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, 2.5 Genérica, 2.0 Genérica e 1.0 Genérica.
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.
Pode escolher a licença que quiser.
 
W3C-validity not checked.

Source code (C)

/* Compilation  instructions */
/* gcc -Wall -ansi -pedantic -o Pi_archi_approx Pi_archi_approx.c */

/* This program generates an SVG image, showing Archimede's technique to */
/* approximate pi */
/* One argument can be provided, as the maximum number of approximations desired */
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

#define PI 3.14159265358979

int main(int argc, char **argv)
{
    int i,j,n;
    double id,coeff;
    FILE *fpt;
    double *x, *y;
    double R = 40.0;
    /* Angle values*/
    double alpha, alpha_offset;

    int    fontsize    = 10;
    double strokewidth = 0.8;
    if (argc == 2)
        n = (int)atof(argv[1]);
    else
    {
        n = 10;
    }
    if (n<3)
    {
        printf("\n");
        fflush(stdout);
        exit(1);
    }
    /* Opening result file*/
    fpt = fopen("Pi_archi_approx.svg","w");
    fprintf(fpt,"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n");
    fprintf(fpt,"<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd \">\n");
    fprintf(fpt,"<svg\n");
    fprintf(fpt,"   xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\" \n");
    fprintf(fpt,"   xmlns:svg=\"http://www.w3.org/2000/svg\" \n");
    fprintf(fpt,"   xmlns=\"http://www.w3.org/2000/svg\" \n");
    fprintf(fpt,"   width=\"%dpx\" \n",(int)(((n-2)*3+1)*R));
    fprintf(fpt,"   height=\"%dpx\" \n",(int)(4.5*R));
    fprintf(fpt,"   >\n");
    for (i=3;i<=n;i++)
    {
        id = (double) i;
        x  = (double *)malloc(i*sizeof(double));
        y  = (double *)malloc(i*sizeof(double));
        fprintf(fpt,"   <g>\n");
        fprintf(fpt,"    <circle cx=\"%f\" cy=\"%f\" r=\"%f\" ",((id-2)*3-0.75)*R,2.5*R,R);
        fprintf(fpt,"stroke=\"black\" stroke-width=\"%f\" fill=\"none\"/>\n",strokewidth);
        fprintf(fpt,"    <polygon points=\"");
        alpha_offset = -PI/2 + ((i%2)==0) * PI/id;
        for (j=0;j<i;j++)
        {
            alpha = alpha_offset + 2*j*PI/id;
            x[j]  = cos(alpha);
            y[j]  = sin(alpha);
            fprintf(fpt,"%f,%f ",R*x[j]+((id-2)*3-0.75)*R,R*(y[j]+2.5));
        }
        fprintf(fpt,"\" fill=\"none\" stroke=\"black\" stroke-width=\"%f\"/>\n",strokewidth);
        coeff = 2.0/sqrt((x[0]+x[1])*(x[0]+x[1]) + (y[0]+y[1])*(y[0]+y[1]));
        fprintf(fpt,"    <polygon points=\"");
        for (j=0;j<i;j++)
        {
            fprintf(fpt,"%f,%f ",R*coeff*x[j]+((id-2)*3-0.75)*R,R*(coeff*y[j]+2.5));
        }
        fprintf(fpt,"\" fill=\"none\" stroke=\"black\" stroke-width=\"%f\"/>\n",strokewidth);
        free(x);
        free(y);
        fprintf(fpt,"    <text x = \"%f\" y = \"%f\" text-anchor=\"middle\" fill = \"black\" font-size = \"%d\">\n",
                    ((id-2)*3-0.75)*R,4*R,fontsize);
        fprintf(fpt,"      n = %d\n",i);
        fprintf(fpt,"    </text>\n");
        fprintf(fpt,"  </g>\n");
    }
    fprintf(fpt,"</svg>\n");
    fclose(fpt);
    return (0);
}

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
atual12h21min de 22 de março de 2009Miniatura da versão das 12h21min de 22 de março de 20091 000 × 180 (6 kB)Gjacquenot{{Information |Description={{en|1=Archimedes' Pi aproximation}} {{fr|1=Approximation de pi par la méthode d'Archimède}} |Source=travail personnel (own work) |Author=Guillaume Jacquenot |Date=2009-03-22 |Permission= |other_versions=fi

A seguinte página usa este ficheiro:

Utilização global do ficheiro

As seguintes wikis usam este ficheiro: