Autoria de Swift PlaygroundBooks — parte 2

Rosas Polares

Pedro Cacique
phcacique
4 min readOct 11, 2020

--

Olá, mundo!

Este artigo é o segundo de uma série sobre autoria de PlaygroundBooks. Veja ao final desta página o índice para os demais artigos.

A primeira coisa que precisamos fazer ao começar a desenvolver um PlaygroundBook é determinar o tema a ser desenvolvido. Enquanto professores, podemos identificar um tópico do plano de ensino que queremos desenvolver. É importante lembrar que o Playground não serve apenas para o ensino de programação, mas de qualquer outro assunto.

É importante criar um planejamento dos capítulos e páginas de forma a conduzir o aluno no seu processo individual de aprendizagem. Assim, é muito importante que planejemos níveis de dificuldade crescentes e exercícios e testes durante o caminho, assim o aluno pode confirmar o que aprendeu.

Para esta série, quero desenvolver um PlaygroundBook simples, pois o objetivo é te ensinar a manipular os arquivos da estrutura comum apresentada na primeira parte da série.

Sendo assim, escolhi trabalhar com algo que eu amo que é a Arte Generativa. Vamos criar um livro que ensine o que é esta modalidade, apresentando um exemplo prático: as Rosas Polares.

O conteúdo deste artigo foi apresentado no Programa de Índio, e simplificado para o nosso exemplo. Assista ao vídeo para ter uma base mais detalhada. Em seguida, explicarei o código base que usaremos aqui.

Rosas Polares

Em Matemática, um a rosa polar é uma função senoidal que tem uma característica muito específica, seguindo a equação:

r(Θ) = cos(kΘ)

Veja que, em coordenadas polares, o raio da curva é variável com o ângulo e diretamente proporcional ao cosseno do mesmo ângulo, multiplicado por uma constante k. Com base nesta constante, pode-se determinar como será a imagem gerada. Por exemplo:

  • se k é um inteiro e ímpar, a rosa desenhada terá k pétalas;
  • se k é um inteiro e par, a rosa terá 2k pétalas;
  • se k é irracional, temos um conjunto denso de curvas dentro mesmo raio;

Estas rosas possuem alguns nomes comuns para alguns valores de k:

  • k = 3 temos um Trifolium Regular;
  • k = 2 (4 pétalas), temos um Quadrifolium Regular;

Mas essa constante também pode ser uma fração. Caso k seja igual a 1/2, por exemplo, temos um Folium de Durero.

Modelo Matemático em Swift

Pensando nisso, podemos criar uma classe em swift que represente esta Rosa Polar, contendo alguns atributos mínimos para a determinação dos pontos da curva gerada.

Veja o que já podemos determinar como atributos:

  • n — numerador da constante k
  • d — denominador da constante k
  • P(x,y) — ponto central onde a rosa será desenhada (usado para calcular os demais pontos)
  • r — raio da circunferência que contém a rosa

Usando estes atributos, criamos uma classe em Swift que represente o modelo matemático de Rosas Polares. Observe que estamos criando um modelo independente do framework que será usado para desenho da Rosa.

No código acima, veja que a função principal é a generatePoints(), que cria um loop, incrementando o ângulo, calculando o novo raio (com base na equação da rosa) e em seguida calculando os valores cartesianos x e y do ponto calculado. Para isso realiza-se uma conversão de coordenadas polares para cartesianas (linhas 33 e 34).

Os pontos da rosa estão então armazenados no array points, que poderá ser acessado para desenho mais adiante.

Desenhando a rosa dom SpriteKit

Agora vem a parte mais divertida, desenhar na tela!

Em playground aceita vários tipos de dados como elementos renderizáveis. No vídeo do Programa de Índio, eu usei uma ViewController, pois a intensão do canal é expandir o projeto mais adiante. Mas para o nosso trabalho, podemos adotar a própria SKScene como elemento renderizável. veja:

Perceba que esta é uma cena como outra qualquer, mas foi adicionado um método de desenho que recebe um array de pontos, a espessura e a cor da linha. Usando a estrutura do CGMutablePath, nós desenhamos a linha ponto a ponto. Veja maiores detalhes no vídeo indicado no começo do artigo.

Testando o código

Por fim, para testar o nosso código, vamos instanciar a cena e uma rosa na página inicial do Playground. Veja que nas linhas 4 a 7 estamos inicializando a cena e determinando os parâmetros de escala e apresentação.

Nas linhas 9 a 14, criamos as variáveis com os parâmetros da rosa polar a ser criada. nas linhas 16 e 17, criamos a rosa e desenhamos na tela. Por fim, na linha 19, dizemos que a view a ser apresentada na página do playground é a view criada no começo do código.

Vá em frente! Aperte no botão de Play para rodar o código. É de se esperar que o resultado seja assim:

Playground: Rosas Polares

Finalizando

Pronto! Este é todo o código em Swift que vamos precisar para este exemplo de PlaygroundBook que construiremos ao longo desta série de artigos. Você pode acompanhar com o seu próprio código também, se quiser.

Ao longo da série, vamos editar a estrutura do livro. Assim, você pode usar o seu próprio livro para teste ou usar o que estamos começando com as rosas polares.

Caso queira aproveitar este que estou fazendo, o ponto de partida está na minha subscription de playgrounds. Quer saber como pegar? acesse:

No próximo artigo falaremos sobre como colocar uma capa bem bonita no livro! Aproveita o tempo entre um e outro pra se inscrever no Programa de Índio e ficar atualizado com o conteúdo que estou produzindo especialmente pra você.

Tchau

Índice da série

--

--

Pedro Cacique
phcacique

Coordinator at Apple Developer Academy | Mackenzie