Faz qualquer coisa...

Este é um blog de geral de matemática, física, electrónica, áudio, LISP, Arduino, impressão 3D, etc, ... Já tem uns anitos :)

As entrada antigas estão arquivadas de uma forma não linear.

Happy hacking!

RSS

[Valid RSS]


Viseiras de proteção: COVID19
impressas em 3D + acetato

2020/04/06-15:15:31

Um grupo de voluntários 3dmask PT começou a 3D imprimir viseiras par proteção para profissionais de saúde. Se precisar de uma envie-me um email para tiago.charters.azevedo@gmail.com ou contacte-me pelo twitter @charterazevedo. Consigo fazer entregas na zona de Lisboa.

O modelo usado está disponível para download.

Consigo imprimir cerca de 10 viseiras por dia. Para além da viseira impressa são necessários um elástico de escritório e um acetato A4 que deve ser substituído depois de algumas horas de utilização.

ATENÇÂO:

Instruções para furação do acetato

Dobrar levemente o acetato ao meio e marcar 8cm a partir da dobra.

Colocar a marca no centro do agrafador e furar.

Colocar o acetato na viseira: é necessário algum jeito para o colocar. Começar pelos suportes interiores e usar a elasticidade da armação para colocar o acetato.

Bem hajam!

Ref.:

Etiquetas/Tags: covid19, 3dprint, maker, mutual aid


Viseiras de proteção: COVID19
impressas em 3D + acetato

2020/03/24-18:19:21

Um grupo de voluntários 3dmask PT criou este modelo 3D para a impressão de uma viseira de proteção para profissionais de saúde. Se precisar de uma envie-me um email para tiago.charters.azevedo@gmail.com ou contacte-me pelo twitter @charterazevedo. Consigo fazer entregas na zona de Lisboa.

Consigo imprimir cerca de 6 viseiras por dia. Para além da viseira impressa são necessários um elástico de escritório e um acetato A4 que deve ser substituído depois de algumas horas de utilização.

ATENÇÂO: A viseira deve ser desinfetada regularmente com água e sabão e álcool. É feita em PETG e suporta temperaturas até 100 graus Celsius sem se deformar consideravelmente.

Instruções para furação do acetato

Dobrar levemente o acetato ao meio e marcar 7cm a partir da dobra.

Colocar a marca no centro do agrafador e furar.

Colocar o acetato na viseira: é necessário algum jeito para o colocar. Começar pelo suporte exterior e usar a elasticidade da armação para colocar o acetato. É necessária alguma força.

Bem hajam!

Etiquetas/Tags: covid19, 3dprint, maker, mutual aid


Aprops do COVID19

2020/03/11-17:44:09

Bacillus dendroides e a equação logística

O modelo logístico assume que o crescimento inicial de uma população com latex2png equation indivíduos aumenta exponencialmente com taxa de crescimento constante e à medida que latex2png equation aproxima-se do limite máximo e a taxa de crescimento latex2png equation diminui ando origem a uma curva tipo-S.

Os mecanismos que causam este abrandamento dependem da caracterização da população, ou do sistema a ser modelado, mas estudos empíricos mostram que este comportamento está presente em processos de crescimento e difusão, onde existe um sistema de feedback associado e.g. restrições ao uso de alimento, espaço físico, hospedeiros no caso de propagação viral, etc. Assim o modelo logístico é um modelo genérico que modela sistemas com mecanismos conhecidos mas também com propriedades escondidas.

O caso clássico é do crescimento da bactéria Bacillus dendroides1. A figura seguinte mostra os sucessivos estágios de desenvolvimento da bactéria Bacillus dendroides num período de 6 horas numa solução de agar-agar. Neste caso usa-se a área ocupada pelo crescimento como medida do número de B. dendroides em instantes sucessivos (latex2png equation).

É possível modelar o crescimento de latex2png equation indivíduos de uma determinada população através de uma equação diferencial, equação logística, com a forma latex2png equation

A solução da equação anterior com condição inicial latex2png equation (latex2png equation) é dada por

latex2png equation

O valor latex2png equation atinge metade do valor máximo latex2png equation no instante

latex2png equation

Outra forma de escrever a solução da equação e que é mais útil para estimar os parâmetros relevantes é3:

latex2png equation

1. R. Pearl, ‘‘The Growth of Population’’ Quart. Rev. Biol. 2, 532–548, (1927)

2. H. G. Thornton, On the development of a standardized agar medium for counting soil bacteria Ann. Appl. Biol., 9:241-274, (1922)

3. C. Mar-Molinero, Tractors in Spain: A Logistic Analysis, The Journal of the Operational Research Society, Vol. 31, No. 2, pp. 141-152 (1980)

Etiquetas/Tags:


Vertex Nano 3d printer
... config files and whatnot

2020/02/05-16:42:42

Just got a Velman Vertex Nano 3D printer. Had to hack a glass to replace the original stuff that was over the bed. Works nicely now.

Here's the configuration gdode files. Have fun!

M502 ;Revert to the default "factory settings."
M500 ;Store parameters in EEPROM
M117 HOMING...
G28  ;Auto home
M117 POSITIONING NOZZLE
G1 X40 Y40 Z2 F500 ;Position Nozzle
G4 S1 ;Wait a second
M117 MOVE Z TO TOUCH BED
M117 POSITIONING NOZZLE
G1 X0 Y80 F500 ;Position Nozzle
G4 S1 ;Wait a second
M117 APPLY HOME OFFSETS

Etiquetas/Tags: vertex nano, 3d, 3d printer


Sequência de Kolakoski
Notas sobre a sequência de Kolakoski

2019/12/17-20:07:54

A sucessão de Kolakoski1 é definida por:

Um algoritmo simples é o seguinte (em 2 está a versão em GNU/Octave):

a=[1 2 2]
  i=3:n
    j=1:a(i)
      a=[a 1+mod(i-1,2)]

o que dá

 1  2 2  1 1  2  1  2 2  1  2 2  1 1  2
 -  ---  ---  -  -  ---  -  ---  ---  - (...)  
 1   2    2   1  1   2   1   2    2   1   

O algoritmo anterior está definido de uma forma imperativa e tem uma tradução para LISP com forma

(defun kolakoski. (n)
  "Kolakoski sequence."
  (let ((a '(1 2 2)))
    (do ((i 2 (+ i 1)))
        ((= i n))
      (do ((j 1 (+ j 1)))
          ((= j (+ 1 (car (nthcdr i a)))))
        (setq a (concatenate 'list a (list (+ 1 (mod i 2)))))))
    a))

Vejamos então como construir uma forma funcional para gerar a sequência. A ideia é obter o valor de m (ver figura acima) definido como o mínimo, fixado um n, de todas as somas maiores ou iguais a n o valor do n-ésimo termo da sucessão é então dado por

((lambda (x)  (/ (+ 3 (expt -1 x)) 2)) 'm)

. Antes de construirmos essa função precisamos de algumas funções auxiliares

(defun sum (x)
  "Sum of elements of X."
  (cond (x
         (+ (car x) (sum (cdr x))))
        (t 0)))

(defun lin-seq (n)
  "Retuns (1 2 3 ... n)."
  (cond ((= n 1)
         (list 1))
        (t
         (append (lin-seq (- n 1)) (list n)))))

(defun nest (op xo n)
  "Applies OP to XO N times."
  (cond ((= n 1)
        xo)
        (t (nest op (funcall op xo) (- n 1)))))

(defun partial-sum (lst)
  "Partial sums of LST."
  (reverse (maplist #'sum (reverse lst))))

Vejamos então como funciona a função find-m definida por

(defun find-m (lst n)
  (+ 1 (length  
        (mapcan #'(lambda (y) (and y (list y)))
                (mapcar 
                 #'(lambda (x) (<= x n)) (partial-sum lst))))))
É composta de duas partes: dada uma lista lst, a primeira, verifica se a condição <=n x é t ou nil, por exemplo, dada uma lista (1 2 3 4) com somas parciais (1 3 6 10) a aplicação da condição (< x 3)=, onde x é o valor de cada entrada da lista, dá
> (mapcar #'(lambda (x) (<= x 3)) (partial-sum '(1 2 3 4)))

(t t nil nil)
A segunda parte da função remove as entradas nil através de
> (mapcan #'(lambda (y) (and y (list y))) '(t t nil nil))

(t t)
e, logo, o valor de m é o comprimento desta última lista mais um.

De seguida verifica-se se está tudo bem calculando o valor dos sucessivos m

> (mapcar #'(lambda (x) (find-m (kolakoski. 20) x)) 
                '(0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20))

(1 2 2 3 3 4 5 6 6 7 8 8 9 9 10 11 11 12 12 13 14)
e desfaz-se a transformação de modo a obter a sequência original
> (kolakoski. 20)

(1 2 2 1 1 2 1 2 2 1 2 2 1 1 2 1 1 2 2 1 2 1 1 2 1 2 2 1 1 2)
através de
> (mapcar #'(lambda (x)  (/ (+ 3 (expt -1 x)) 2))
        (mapcar #'(lambda (x) (find-m (kolakoski. 20) x)) 
                '(0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20)))

(1 2 2 1 1 2 1 2 2 1 2 2 1 1 2 1 1 2 2 1 2)

A construção da sequência de Kolakoski vem então definida por

(defun kolakoski (seq)
  (append seq (list (/ (+ 3 (expt -1
                        (find-m seq  (length seq) ))) 2))))
Exemplificando
(kolakoski '(1 2 2))
e
> (nest 'kolakoski '(1 2 2) 20)

(1 2 2 1 1 2 1 2 2 1 2 2 1 1 2 1 1 2 2 1 2 1)

1. The American Mathematical Monthly, Vol. 72, No. 6 (Jun. - Jul., 1965), pp. 673-67

2.

function retval = kolakoski (n)
  retval=[1 2 2];
  for i=3:n
    for j=1:retval(i)
      retval=[retval 1+mod((i-1),2)];
    endfor;
  endfor;
endfunction;

3. O número de termos não está correcto, a sequência final tem 22 termos e não 20, isto resolve-se com a indexação correcta de cada termo (índice que indexa as entradas de cada lista começa em 0).

Etiquetas/Tags: Kolakoski, Lisp, matemática, self-generating, GNU/Octave


Movimento
Movimento com atrito de um ponto material sobre uma superfície sujeito apenas ao seu próprio peso

2019/12/17-19:28:38

latex2png equation

Ref.: Principle of least constraint: Equações de movimento e resolução numérica do movimento de um ponto material sobre uma superfície

Etiquetas/Tags: matemática, física, Gauss, Principle of least constraint


Almost a unison
Almost a unison from a harmonograph

2019/11/20-22:03:44

Almost a Unison.
Almost a Unison.

Etiquetas/Tags: unison, harmonograph


Almost a unison, again
Almost a unison from a harmonograph

2019/11/20-22:03:37

Almost a Unison.
Almost a Unison.

Etiquetas/Tags: unison, harmonograph


POV-Ray ray tracing program
... which generates images from a text-based scene description

2019/11/20-11:38:51

#version 3.6; // 3.7;
#global_settings{ assumed_gamma 1.0 }
#default{ finish{ ambient 0.1 diffuse 0.9 }}

#include "colors.inc"
#include "textures.inc"

//------------------------------------------------------------
// camera
//------------------------------------------------------------

#declare Cam0 = camera {perspective angle 40
                        location  < 0.0 , 4.5 ,8>
                        right     x*image_width/image_height
                        look_at   <0.4 , 1 , 0.0>}
camera{Cam0}
// sun ---------------------------------------------------------------
light_source{<1500,2500,-2500> color rgb<1,1,1>}
// sky ---------------------------------------------------------------
sphere{<0,0,0>,1 hollow
    texture{pigment{gradient <0,1,0>
        color_map{[0.0 color White  ]
          [0.2 color SkyBlue]
          [.9 color rgb<0,.1,1>]
          
          }
                       quick_color White }
               finish {ambient .5 diffuse 1}
               }
       scale 10000}
//------------------------------------------------------------
// the Water
//------------------------------------------------------------

difference{
plane{<0,1,0>, 0 }

   texture{Polished_Chrome
                    normal { crackle 1 scale 10
                             turbulence 1 translate<0,-10,0>}
                    finish { diffuse 0.5 reflection .75}}
          }

#version 3.6; // 3.7;
#global_settings{ assumed_gamma 1.0 }
#default{ finish{ ambient 0.1 diffuse 0.9 }}

#include "colors.inc"
#include "textures.inc"

//------------------------------------------------------------
// camera
//------------------------------------------------------------

#declare Cam0 = camera {perspective angle 30
                        location  < 0.0 , 4.5 ,8>
                        right     x*image_width/image_height
                        look_at   <0.4 , 1 , 0.0>}
camera{Cam0}

//------------------------------------------------------------
//sun
//------------------------------------------------------------
//light_source{<1500,2500,-2500> color rgb<1,1,1>}
light_source{<100,200,-200> color rgb<1,1,1>}

//------------------------------------------------------------
// sky
//------------------------------------------------------------
sphere{<0,1.2,-5>,1 hollow
    texture{pigment{gradient <1,1,0>
        color_map{[0.0 color White  ]
          [.5 color rgb<1,1,1>]

          
          }
      quick_color White }
    finish {ambient .5 diffuse 1}
  }
  scale 1}

sphere{<3,2,-4>,1 hollow
    texture{pigment{gradient <1,1,0>
        color_map{[0.0 color Red  ]
          [.5 color rgb<1,0,0>]

          
          }
      quick_color White }
    finish {ambient .5 diffuse 1}
  }
  scale .618}

//------------------------------------------------------------
// Water
//------------------------------------------------------------

difference{
plane{<0,1,0>, 0 }

   texture{Polished_Chrome
                    normal { crackle 1 scale 7
                             turbulence 5 translate<0,-10,0>}
                    finish { diffuse 0.5 reflection .75}}
          }// end of difference

Ref.: https://www.povray.org/

Etiquetas/Tags: povray, images, ray tracing


BoomBox
What was the fastest-adopted gadget of the last 50 years?

2019/06/15-23:13:31

Pop quiz. What was the fastest-adopted gadget of the last 50 years? The Color TV? The mobile phone? The DVD player? No, believe it or not, it was the boombox. — Sprite

Etiquetas/Tags: hifi, audio, boombox, diy


Palavras chave/keywords: página pessoal, blog

Criado/Created: NaN

Última actualização/Last updated: 28-04-2020 [17:22]


Voltar à página inicial.


GNU/Emacs Creative Commons License

(c) Tiago Charters de Azevedo