Transcrições
1. Introdução: Olá a todos. Meu nome é mais pesado e este é um ruído fluído, claro, que se aprofunda no reino da arte generativa. Apresentando-me um algoritmo glorioso conhecido como Perlin Ruído. O ruído é uma função implementada por muitos jornalistas, artistas em uma infinidade de formas. Nós, no entanto, focaremos principalmente em movimento em um campo de fluxo, primeiro entendendo a função de ruído no processamento, visualizando seus valores ir alguma animação simples como um círculo oscilante e rotações aleatórias suavizadas, que ajudará a fazer a transição para gerar animações
fluidas em obras de arte estáticas como esta, a fórmula aprenderá que pode apresentar inúmeros resultados ajustando alguns parâmetros, como escalas, tamanho do
passo, ou até mesmo a geometria usada . Então, vou guiá-los através de cada um na esperança de ajudá-lo a entender como o ruído funciona e, finalmente, chegar ao seu fluxo. Então vamos entrar nas lições e começar a aprender.
2. O que é ruído?: Tanto o ruído quanto a função aleatória produzem valores aleatórios. Somente o ruído é mais orgânico em comparação ao aleatório porque os valores de ruído são influenciados por seus valores vizinhos, gerando movimentos suaves de fluidos que ocorrem na natureza, como nuvens ,
cabelos e correntes de água. Sintaticamente, a função de ruído leva 12 ou três argumentos, mas os valores resultantes sempre estarão entre 01. Verá na próxima lição alguns exemplos para visualizar as funções de ruído para fora.
3. Exemplo: que é ruído?: Antes de entrarmos nas coisas mais avançadas, eu quero explicar ou você quer mostrar como vamos usar a função de ruído. Agora, a função de ruído só produz valores de 0 a um, independentemente dos valores que você coloque nela. É muito diferente da função aleatória onde você coloca um valor mínimo e
um valor máximo e você obtém valores são valores flutuantes entre esses números. Mas para o ruído, não importa o tamanho dos valores que você colocar
nele, ele sempre produzirá um valor de 0 para um. Então vamos precisar escalar para cima, mas ao mesmo tempo, também
vamos precisar ampliá-lo. Então nós queremos apenas um pedaço dessa onda
desses valores de ruído porque queremos um movimento fluido muito suave, porque ele vai nos dar um movimento muito rígido. Se não ampliarmos uma parte disso, vou começar mostrando o exemplo com a onda senoidal. E então vamos olhar para o exemplo com a função de ruído porque uma onda senoidal é muito mais fácil de visualizar porque é muito uniforme. Quando a boa função é um pouco mais
difícil de decifrar se houve mudanças ou não, ou se ainda estamos usando a mesma onda ou não. Certo, vamos começar criando a onda. Então eu vou precisar de um ponto x e y. E então dentro da função de configuração, eu vou desenhar a onda. A onda vai de 0 para largura, e então vai estar no meio ou no centro da tela. Altura sábia para o x irá de 0 para a largura. Mas então para os valores y, eu vou usar a função seno. E então eu vou inserir dentro dele os valores x. E eu vou desenhar um vértice em x e y. e eu também vou inicializar y, altura dividida por dois. Precisamos começar formas e para cada vértice se conectar com o outro. E agora temos uma onda senoidal
muito pequena. Agora, a fim de escalá-lo, vamos multiplicá-lo por uma altura. Porque se eu quiser escalá-lo por um para dar-lhe uma amplitude que é a altura da onda. Então vamos dizer que eu quero dar-lhe uma altura de dez. Agora começamos a ver a onda. Vamos, na verdade, ir ainda mais alto. Então eu vou fazer um 100. E você pode ver que a onda quase não tem largura, é muito estreita. A fim de fazer isso, nós precisamos tipo de zoom nele. Então é por isso que chamam de escalas e tempos. Vou chamar-lhe largura aqui porque é a largura da onda. Então, a fim de dimensionar a largura de cada onda, eu vou dividir o valor x aqui por 1000. Então já vemos que é muito maior porque aumentamos a largura da onda. E vamos, na verdade, diminuir isso para dez. Agora começamos a ver melhor a onda. Então agora que sabemos que temos embora a largura das ondas e a altura das ondas, vou adicionar mais dois valores aqui. Um culto para o qual eu vou dar-lhe um valor de dez. E então eu vou fazer isso chamado aresta muda de altura. E eu vou dar um valor de dois porque foi o que eu testei antes. Então eu vou mudar isso com largura e altura. Agora sabemos que temos uma onda senoidal com uma largura de dez e uma altura de dois. Agora, a fim de fazer isso no centro, diretamente no centro, eu vou subtrair a largura multiplicada pela altura do porquê. Isso não é necessariamente importante, mas eu gosto de colocar minha onda no centro e é muito mais fácil para você visualizar como a onda muda se mudarmos os valores. Então agora podemos ver que ele está no centro e agora os valores estão realmente corretos. E eu posso ver a altura de dois ou uma onda com uma altura de dois e uma largura de dez. E se quisermos mudar isso, digamos 200, que é a largura para 100, você pode ver que é muito maior porque a largura agora é muito maior. E então se eu fizer, digamos 15, agora são duas ondas. E se fizermos cinco, é muito menor. Então, sim, depende de como você quer fazer isso. Então, o ponto a tirar aqui é que a largura ou qualquer valor que você colocar aqui habilita a onda. Então, se colocarmos 40, então vamos aumentar a onda. Gosto de pensar nisso como aproximando a onda. E então quanto maior esse valor é onde a altura, as ondas mais íngremes serão. Então, se vamos mover um círculo nesta onda, e podemos fazê-lo agora para que você possa vê-lo. Mas antes que possamos fazer isso, vou salvar esta onda em classe de apreciação. Porque então podemos apenas desenhar a forma uma vez dentro da função de desenho. Então você pode usar o loop for para mover o círculo na Onda e criar uma forma de peça. É muito simples. Você apenas cria a forma da classe P e então você chama o que quiser. E, em seguida, aqui ou na função de configuração, você inicializá-lo usando forma limpa. E, em seguida, você usa onda ou os métodos dentro
da classe PCA em vez de apenas usar
forma iniciada que é diretamente usado dentro do processamento. E aqui também, você acena e usa o vértice dentro da classe em forma de T. E agora você tem a forma que não aparecerá a menos que ele usasse a função de forma. Assim podemos usá-lo aqui. Então eu vou apenas recuar, porque nós não queremos que ele desenhe, nós queremos uma animação para ter feito. E então eu vou chamar a onda. Dentro da função de forma aqui. E agora podemos vê-lo aparecendo aqui. Se eu remover o fundo, ele vai desenhá-lo, se ele vai ser muito grosso. E também você quer mover o círculo e nós não queremos que ele desenhe. Ok, então agora podemos desenhar o círculo no mesmo ponto que o vértice. E eu vou dar a largura do círculo de dez. E então aqui, como fizemos aqui, aumentamos x em um. Eu vou aumentar x por um também. E então eu vou aumentar y i, a onda senoidal, dividida por, que é x dividido pela largura, para ampliá-la e torná-la muito maior. Então o movimento é muito mais suave. E então multiplicamos por uma pele, então damos força à força, porque agora está ficando mais íngreme. mais, maior o número está ficando mais íngreme e o hardware para o círculo mais longo Fred o círculo para subir e descer. E agora eu vou fazer também se x é maior que a largura. E eu queria voltar para 0 porque eu quero que o círculo se mova. E então uma vez que ele sai da tela e volta para cá. Então agora eu posso ver o círculo realmente se movendo através da onda e você pode ver como o movimento é muito suave. Agora. Quanto maior for, a altura é que é a força ou a inclinação dessas ondas. Quanto mais rápido para os círculos se moverem porque ele precisa alcançar tudo isso e ao mesmo tempo ou no mesmo quadro, taxa de quadros. Agora vamos passar para os exemplos de ruído, já que é isso que vamos usar. Então, há algumas coisas que eu vou mudar porque nós não vamos usar uma largura e altura que é apenas usado normalmente com a função seno porque é muito aparente onde a largura é e a altura é. Mas para o barulho, eu vou mudar a largura para escala porque é zoom e aumentar a aparência da onda. E então eu vou chamar a altura de força. Porque quanto maior é, mais você sai do que quer que você usa a função de ruído, que nós vamos usá-lo com ângulo. Portanto, quanto maior a mola for, maior a rotação ou mais rotação você obterá. E então eu vou mudar cada largura para escala. Você não está se acostumando. Esta parte. Vamos fazer de forma diferente aqui. E força para a altura. E também aqui para fazer algo diferente. E então isso também vai ser escala em fornos foi para cordas E. Certo, digamos que mudou isso para barulho. Então, seja qual for o valor que sair do Aaron vai ser de 0 a 1 e multiplicado pela força, vai torná-lo maior. Então vai dar mais força. E eu não vou adicionar a isso, função de
ruído funciona um pouco diferente. E precisamos mudá-lo aqui também. Mas vamos deixar tudo igual. E começamos a altura na altura do Wyatt dividido por dois. Mas então nós também vamos ter que mover isso para baixo em vez disso. Então, mais. Mas vamos realmente ver como ele fica agora e depois mudá-lo mais tarde. Ok, então a razão pela qual eu empurrei para baixo, então eu disse y mais altura dividido por dois. É porque sobe aqui perto do 0. Então eu vou apenas movê-lo adicionando
altura dividida por dois será aqui e, em seguida, o mesmo aqui. Então eu só estou empurrando para baixo porque agora a força é apenas dez. E assim ele vai nos dar um valor de 0 a dez. Como você pode ver, a onda é muito grossa. E a maneira como podemos melhorar isso ou realmente olhar para uma dessas peças é ajustando a escala. Então você pode precisar de números de habilidade muito grandes, a fim de obter movimentos muito suaves. Então, se eu for um 100, você pode ver que é muito mais suave e fora, mas então não há rotação ou há muita altura nesta onda. Então eu também vou aumentar isso. E como você pode ver, estamos começando a ter algumas formas agradáveis ou um bom movimento fluido. E se eu for ainda mais alto para a rotação, então eu teria colina como movimentos. E isso pode produzir resultados muito bons se o adicionarmos ao ângulo ou à forma como as formas giram. E é isso que vamos usar no próximo exame. Além disso, estamos usando aqui é um ruído unidimensional. Então estamos usando apenas um argumento dentro da função de ruído quando você pode realmente usar um ruído bidimensional, qualquer ruído tridimensional. E sim, não vou apresentá-lo agora. Isso vai ter seu próprio capítulo. Mas agora, tudo o que você precisa saber é que a escala amplia na onda para que você possa ver, que você possa vê-la melhor, tem mais movimento fluido porque agora estamos nos movendo de 0 para a largura usando apenas um pedaço da onda. Quando, antes, quando eram apenas dez anos, nós realmente passamos por muito mais. E então a força lhe dá mais altura. Agora podemos usar a função de semente NOI para dar
a mesma forma uma e outra vez para que possamos ver como as coisas estão realmente se movendo. Então, se eu fizer, eu vou dar um 0. Você pode dar qualquer número que você. Então, toda vez que eu rodar agora, vamos ter exatamente a mesma onda. Quero que se concentre na primeira área da onda. E eu vou aumentar isso só um pouquinho. Como você pode ver, são exatamente as mesmas maneiras de olhar, mas está ficando um pouco maior porque estamos chegando perto dele. Então ele está realmente recebendo este pedaço da onda, quanto maior é este número. Então, se você for 30, você vai ver que
isso, vai ficar maior. E como você pode ver, é exatamente da mesma maneira, mas está ficando maior. E se eu fizer 50, então é exatamente a mesma onda. Vamos ainda mais alto e arranjar-te 100. E você pode ver que é exatamente o mesmo movimento, mas é muito maior porque estamos aumentando. E então se aumentarmos a força, você verá que os picos vão ficar mais altos e as partes inferiores vão ficar mais baixas. Então esta parte vai realmente sair da tela. Então, se eu for, digamos 400. E você pode ver que são exatamente as mesmas maneiras, mas agora está indo mais baixo aqui e mais alto aqui. Se ficar confuso com isso, não se preocupe. É a mesma fórmula que você só joga com a habilidade e a força. E nós não vamos mudar muito mesmo em função de ruído bidimensional. E na função tridimensional irrita, só vai ser exatamente a mesma coisa, apenas adicionando um valor y ou valor Z. E vamos ver isso no próximo capítulo. E, por enquanto, concentre-se em que habilidade e força devido à onda de ruído.
4. Campo de fluxo: Antes de começarmos a criar obras de arte usando ruído, quero mostrar a vocês como é um campo de fluxo, porque isso é basicamente a base de tudo o que vamos criar. Na seção anterior, mencionei que vamos usar ruído para ângulo de movimento. Assim, à medida que as formas se movem através da tela, qualquer direção dos limites da tela,
mas, em seguida, adicionando o ângulo ou adicionando ruído ao ângulo. Propriedade de cada um desses fatores são, cada um desses agentes está realmente criando esse movimento fluido. Eu vou apenas criar uma grade simples e, em seguida, mostrar-lhe como os ângulos realmente se movem através da tela usando a função de ruído. Vamos começar usando apenas um vetor normal e então
vamos incorporar a função de ruído para ver como os ângulos mudam. Movimento fluído Creed através da tela. Para começar, eu vou salvar meu arquivo porque eu quero importar ou você quer salvar nele o RL, criando alguma gangue para simplesmente salvar isso na minha área de trabalho, eu vou chamá-lo de campo de fluxo. E então dentro deste arquivo, eu vou criar um arquivo de dados e é assim que você importa imagens ou molda seu projeto. Então eu vou copiar e colar meu arquivo SVG no estado de mais antigo. E eu chamei de “A Flecha”. E é muito simples seta que eu criei no Illustrator e salvei como um SVG. Vou ligar isto à secção de recursos. Então você pode me acompanhar. Agora, para criar o campo de fluxo, vou criar uma classe chamada campo de fluxo. Dentro do campo de fluxo, vou precisar de um vetor p. Um vetor b é mais fácil de usar aqui porque ele tem um ângulo já embutido nele. Mas nos próximos capítulos não vão usar um fator chave. Eu só vou usar uma posição pitoresca e um x e y. Mas desde que eu quero criar uma grade e eu quero armazenar as posições de cada um dos vetores. Eu vou fazer assim. E eu vou chamar este campo. Assim, a maioria deste código é muito semelhante à natureza do código. É que a forma como eu crio a grade é um pouco diferente. E acho que, na minha opinião, muito mais fácil de compreender só porque estamos focando na forma como criamos uma bolsa na vida real. Ao invés de focar na resolução
das notas e talvez pensar um pouco para trás. Então eu vou apenas usar colunas ou linhas porque é muito mais fácil para mim explicar. É muito mais fácil para mim também entender enquanto eu passo por isso. Vou apenas fazer colunas e linhas para o número de colunas e linhas. E então eu também vou usar a largura
e altura da coluna para calcular a largura e altura de cada célula dentro desse grão. E, em seguida, dentro do construtor desta classe. Eu estou dando. Ele parâmetros, o que são chamados colunas e as linhas. Porque eu quero que o número de colunas e linhas dentro de nossa classe para ser decidido ou programa médio aqui. E então essas colunas serão iguais. O primeiro parâmetro é colunas e linhas de sublinhado. E a propósito, pode chamar isso do que quiser. E depois a largura da coluna. Na verdade, vou chamar isso de silhuetas e Scala. E, em seguida, como é muito mais fácil de entender que é sons altura e largura. E esta será a largura da nossa tela dividida pelo número de colunas. E, em seguida, vender altura ,
jovem TV, a altura dividida pelas linhas. E depois mais um vetor de campo. Vamos criar uma nova matriz vetorial com o número de colunas e, em seguida, o número de linhas. Então esta é uma matriz bidimensional. E então aqui vou criar uma função inet. Para inicializar a nossa rede. Você só usa um simples para ganho
de loop de 0 para as colunas e, em seguida, aninhado para loop para criar as linhas. Então, isto vai ser as colunas. Eu é menor que o número de colunas. E depois, por último, vamos chamá-lo aqui. Porque eu quero inicializá-lo apenas um dentro da função de configuração aqui. E então vamos tentar por aqui, podemos agora posicionar a nossa flecha. Estamos a chegar a essas posições. E para criar as posições, estou apenas começando a criar uma posição x, y posição. E para a exposição, os valores serão i multiplicados pela célula. Então, cada posição do olho, cada ponto do olho vai significar células beta multiplicadas com. Então o primeiro vai ser 0 benzoato multiplicado, então isso vai ser 0. E então o segundo quadrado, a segunda célula vai ser um multiplicado por n célula com, então qualquer que seja a silhueta ou se você tem uma silhueta de um 100 baseado no número de colunas e linhas, então você terá um posição de x em um 100 e assim por diante e assim por diante. O mesmo vale para j neste momento é a altura da célula. E então eu vou criar um vetor P aqui, um vetor p local. E eu vou dar-lhe uma posição 00 para, novamente, só para ver como vai ser. E então eu vou armazenar esta posição onde este vetor p dentro do nosso campo para ser matriz vetorial em i, j para as linhas nos pontos i. E, em seguida, no ponto j, vamos dar-lhe o valor do vetor aqui. Então isso vai basicamente para o primeiro. E então ele vai percorrer cada linha dentro de nossa grade. E ele vai dar a cada ponto ou célula a posição usando este vetor aqui, uma grade muito simples. E eu vou mostrar a vocês mais tarde onde vamos usar as posições do axioma I aqui. Agora nós apenas inicializamos. Vamos mostrar. Então eu vou criar um método de exibição. E aqui vou fazer o mesmo para o loop. E agora vou desenhar o que quisermos. Aqui. Vai ser a forma da seta usando as posições que acabamos de criar. Vou usar uma matriz de empurrões. E eu falei sobre isso nas costas para o curso básico. Se você quiser saber mais sobre a matriz push e matriz pop. Mas vou te dar um resumo do que eles fazem. Então basicamente push matrix e pop matrix cria uma camada diferente ou uma matriz diferente basicamente para cada forma. Então, em vez de mover as próprias formas, eu vou simplesmente mover a camada inteira. Então eu vou criar uma camada para a primeira célula na grade. E eu vou posicioná-lo naquela área onde eu quero a primeira célula TB e então eu vou empurrar uma matriz diferente são outra camada. E eu vou empurrar essa camada inteira ao lado ou na posição da segunda célula. E então faremos o mesmo para o resto do grão porque estamos usando o loop for. Assim, será mais fácil para nós posicionar ou moldar na posição 00 de cada camada. Além disso, você tem que usar a matriz push e matriz pop porque se você alguma vez usar traduzir, girar, e escala fora da matriz push e matriz pop vai executar o mesmo. Digamos que a tradução. Se estamos usando traduzir para mover as formas, ele vai usar a mesma tradução na mesma camada. Então, ele vai se mover até sair da tela. Porque ele vai mover a posição 00 da tela, que é o canto superior esquerdo para a direita e, em seguida, para baixo com base na posição das células até que ele se move para a última célula. Então vai ser o mesmo. Mas se usarmos a matriz push e a matriz pop, então estamos criando uma camada diferente e em seguida, estamos movendo essa camada para a nova posição. Então ele vai mover o primeiro para 00 de toda a tela. E então ele vai mover a segunda camada dois, a segunda posição, que vai ser 0. E então a largura da célula e movendo-se através das colunas e, em seguida, através das linhas. Então agora eu posso usar Translate com segurança, sabendo que ele só vai fazer essa tradução nessa camada. Então vou fazer a mesma coisa que fizemos aqui. E eu não vou usar sempre que posição eu não tenho aqui só porque eu quero mostrar algumas coisas antes de eu usar a posição x e y. Então isso vai quebrar isso para nós. Então eu vou apenas fazer i multiplicado por célula com no dreno, multiplicá-lo pela altura da célula. E então para girar, eu vou ser vetor está indo. Que basicamente é o ângulo em radianos. Então, o cabeçalho é basicamente dizer para onde o vetor está indo. Isso é praticamente tudo. Então, para obter a rotação de cada vetor ou para onde ele está indo, então eu vou apenas usar INJ para obter cada vetor. E então eu vou usar o método de título. E você pode imprimir isso se ele quiser ver os valores dele. Então eu vou escalar a forma também para vinte e cinco por cento seu tamanho original porque é realmente grande olho como é o meu em um 100 por um 100? E como minha tela está dando para ser pequena, 500 por 500, é muito melhor reduzi-la para 25%. E então eu vou desenhar as formas. Então a forma é chamada de Arrow. Na verdade, não criei. Então eu estou começando a criar um ovário aqui usando a chave. Eu vou chamá-lo. E, em seguida, aqui, eu vou importá-lo usando forma de carga. Chama-se Arrow dot SVG. E então eu também vou desativar o Skype. Você não precisa. Eu gosto de torná-lo um hábito de desativar o estilo dos meus SVGs apenas no caso de eu querer mudar a cor mais tarde. Não fico confuso por que não está mudando. Então, agora que desativamos os estilos, eu posso mudar o peso do traço para I basicamente Dustin todos esses para que você não tenha que se preocupar em seguir exatamente. Você pode brincar com o peso do traçado e as cores e tudo isso. E então eu vou parar o loop na função de desenho porque você só quer desenhar a grade e mostrar a você como ela parece. Ok, agora eu posso desenhar a forma aqui. Ele vê que é uma flecha, mas precisa de uma posição para a forma. Eu vou apenas fazer 00 por agora e vamos ver como corrigir isso mais tarde se você vir algum problema. Então é basicamente isso. Antes de criar a concessão, brevemente, inicializamos as posições de cada vetor e, em seguida, exibimo-lo. Então vamos realmente ver como ele se parece. Vamos criar um campo de fluxo fora da classe. Então esta é a nossa instância e apenas chamá-lo de campo de fluxo. E então eu vou inicializá-lo aqui. Então, por exemplo, o campo de fluxo. E vamos dar-lhe o número de colunas e linhas. Vou apenas inicializar esta matriz aqui. Então colunas é igual a 20. E depois para filas, e eu vou agitar e dar-lhe 20 já que temos um quadrado. E deixe-me consertar isso. E agora dentro da função de desenho, eu vou apenas fazer exibição de ponto de campo de fluxo. E deve funcionar agora. Ok, não precisamos consertar nenhuma das formas. Parece bom. Agora vamos ver como podemos mudar a direção dessas setas. Então, para 00 está se movendo para a direita. E então também de um para X e 0 para y, ele vai se mover para a direita, bem como porque nós estamos apenas movendo-o. Ou é como a uma velocidade de um para o lado direito. E então se eu quiser que ele olhe para baixo, eu digo “sim”. E você verá que todas as setas vão realmente se mover para baixo. E agora se eu quiser que ele se mova diagonalmente a 45 graus para a direita e para baixo. Vou escrever um para o X. E agora está a mover-se num ângulo de 45 graus. E agora, se eu quisesse ir na direção oposta, no eixo y, eu vou apenas fazer um negativo. Então, é basicamente como um movimento qualquer forma através da tela com base em sua velocidade. Então, se você disse x mais um, então nós sabemos que ele vai se mover para a direita e dizer y menos um, que está indo para cima. Então, se eu quiser também levar isso para a esquerda, que é a direção oposta ou o oposto da direção padrão. É um negativo. E se eu fizer isso às 0, você verá que vai direto para a esquerda. Se mudarmos isso para x e y, podemos ver rotações diferentes para cada vetor com base em sua posição. Então você pode ver como estamos nos movendo para a taxa, a maioria deles está olhando para a direita e em seguida, enquanto nós vamos para baixo, ele está caindo. E, em seguida, diagonalmente, ele está realmente indo diagonalmente porque é quando a posição do x e y são realmente iguais ou quase iguais. E então eles direcionam para um ângulo de 45 graus. E se eu fizer x negativo, então nós estamos realmente invertendo tudo do lado direito para o lado esquerdo. E então a mesma coisa para y. e teremos uma rotação diferente também. Então ele vai para cima. Então, agora que entendemos isso, vamos realmente usar a função de ruído. Isso significa que antes era antes. Faça alguma coisa, deixe-me corrigir esses problemas de tradução. Então, como você pode ver, a tela inteira ou a tela maior onde estamos exibindo nosso campo de fluxo está no ponto zero nelas. Há lacunas por aqui. Então eu vou apenas movê-lo para a direita por 12.5 e, em seguida, para baixo 12.5. A razão pela qual eu estou fazendo isso, porque cada seta é na verdade um, um 100 pixels por um 100 pixels. E, em seguida, dimensioná-los em maio 25% tem de cada um deles 12,5, porque 25% de um 100 vai atender 25 pixels por 25 pixels para cada seta. E então metade como Deus é 12,5. E eu só quero me mover pela metade porque eu quero mover cada seta para o centro da célula em vez de no canto superior esquerdo de cada célula. E eu também vou consertar isso porque agora eu estou secando na posição 00 de cada um. Mas como eu estou movendo a tela inteira para a direita e para baixo, eu tenho que mover cada forma para cima pela metade de sua largura, para a esquerda pela metade de sua largura. Então podemos fazer isso usando a largura das formas. Então, se eu fizer negativo seta largura ponto dividido por dois, assim e movendo-se para o lado esquerdo por metade de sua largura. E então eu estou me movendo para cima. Eu nunca comandei isto. Deve parecer perfeito. E então, em vez de usar x e y, agora o ruído de Willie funciona para o ângulo e então eu vou coseno e seno o posicionamento do vetor P. Porque eu vou chamar esse ângulo ou teta, seja lá o que você quiser chamá-lo. E eu vou mapear os valores. Ruído, como ele disse antes, ruído. Independentemente dos valores que você colocar dentro do ruído, ele sempre produzirá um 0 ou um valor de 0 para um. E queremos mapear isso de 0 a 10 a dois pi para ângulos. No exemplo anterior, nós realmente dividimos os valores dentro da função de ruído pela escala, e então multiplicamos toda a função Noyce pela força. A única diferença aqui é que nós não vamos multiplicar por seus pontos fortes, mas nós vamos apenas mapear os valores produzidos pela função de ruído, que é de 0 a um, para avaliar de 0 a dois pi e o char, os valores mínimo e máximo dos ângulos em radianos. Então eu vou usar a função de ruído como fizemos antes. Eu vou apenas fazer x dividido pela escala de ruído. E então eu vou mapear esse valor de 0 para um, que são os valores originais que saem da função de ruído. Para 0 a dois pi, que é um círculo completo. E então eu vou inicializar a escala de ruído aqui. Eu vou apenas fazer 300. E agora vou usar o ângulo aqui. Então, para x eu vou usar ângulo cosseno. E então para você eu vou usar seno do ângulo. E então, se eu executar isso agora, vamos ver um movimento fluindo. Não é tão aparente porque é uma função de ruído unidimensional. Então eu vou apresentar brevemente a função de ruído bidimensional. Então a única coisa que você vai mudar é adicionar outros argumentos para o porquê. E também vamos dividi-lo pela escala de ruído. Quando executarmos isso, descobriremos que o movimento é mais fluido porque é uma matriz bidimensional. E como você pode ver, tudo está se movendo para baixo aqui e então ele começa a girar com base nas funções de ruído. Então, se você alterar a escala de ruído, então digamos que seja 100, você verá mais rotações. E, em seguida, quanto maior for, você verá menos rotações porque, como vimos no exemplo anterior, quando falamos sobre escalar ruído ou escalar onda de ruído. À medida que
a escala aumenta, as ondas estão ficando mais suaves porque estamos ampliando em uma parte ou o lado esquerdo da onda. Assim, o movimento ou o círculo usado para mover taxa mais lenta está se movendo através do primeiro pedaço da onda em vez de mover parafuso mais colinas e partes inferiores da onda. Então uma gangue de centenas para produzir mais ângulos. E então quanto mais alto
formos, vai ser mais suave e movimentos. Então, como você pode ver, os ângulos são na verdade mais suaves. E porque nós não temos semente irritante USE valores diferentes cada vez. Então, se você voltar para 300, podemos começar a ver ângulos diferentes. Se você colocar uma purina em cima destes, e então você seguir o ângulo de cada uma dessas setas. Você vai descobrir que círculos estão realmente se movendo com o ângulo ou para a direção das setas. Isso sozinho pode criar belas obras de arte. Se você brincar com a forma que você está usando, você pode criar qualquer arquivo SVG ou qualquer programa que possa produzir SVGs que ele possa importar aqui. E brincar com a onda que isso cria. E também brincar com o número de colunas e linhas. Porque quanto maior o valor para aqueles, você vai ver os caminhos melhor porque então você não vai ver as formas tanto, mas você vai ver mais dos movimentos ou uma onda. Então, se você criar uma linha, por exemplo, você vai ver a onda melhor, a seta que Daniel sapatilha quando usuários na natureza de exemplos de código é muito mais fácil de ver a onda através, porque
ela, é apenas uma linha. Não é uma flecha que se pareça com isso. Você pode criar a área você mesmo ou você pode encontrá-la nos recursos para a natureza do livro de código. Você pode encontrar todo o código na seção GetHub. Então você pode estudar isso também porque eu acho que sua maneira de fazer isso ou o processo, embora seja diferente, pode produzir outros resultados. Porque ele também mostra como fazer um agente ou um robô, segue as setas em cima dele, olhando para cima o valor da rotação e movimentos e fazendo-o seguir isso. Novamente, é um pouco diferente. Então, se tiver alguma dúvida, me avise e talvez eu possa ajudá-lo com isso também.
5. Um agente: Então, para este capítulo vai falar mais sobre como mover usando a função de ruído em vez de apenas olhar para a rotação como fizemos antes. Agora, por esta vez, não
precisamos de uma classe para campo de fluxo, só
precisamos de uma classe para um agente que vai atravessar esta rainha. Não precisamos ver a rotação. A única coisa que o agente precisa para se mover é entender sua velocidade, decide que precisa ser e que tipo de rotação você obterá com base na função de ruído. Então vamos começar criando uma nova guia. E aqui dentro, escreverei minha nova turma que se chama agentes também. Ok, a primeira coisa que o agente precisa é uma posição x e y e velocidades e o tamanho. Vamos começar por anotar o médico e, em seguida, ver como as coisas estão realmente se movendo neles reiniciar incorporando tamanho e vamos ver onde vamos usar as velocidades. Então, novamente, basta começar com x e y. Então x e y vai ser usado da mesma maneira que usamos no campo de fluxo. Mas desta vez vamos usar velocidade para mover nossos agentes pelo campus. Então eu vou inicializar x largura dividida por dois porque eu não quero usar aleatório. E então ele se move para fora da tela ou vai de uma borda deles para fora porque eu não vou verificar os limites ainda para a tela ou nunca realmente porque eu gosto quando eles vão para fora da tela ou preencher a página com o design. E então eu vou fazer y, x altura dividida por dois. E eu tenho minha largura e altura AD 500 por 500. E então, para a velocidade, eu vou dar-lhe uma velocidade de, digamos uma. Ok, agora, este fluxo está se movendo e nós vamos apenas usar um peso pontual. E então eu vou desenhar meu x e y para executá-lo. E podemos ver a classe dos agentes. Vamos inicializá-lo. E não precisamos de parâmetros. Eu só vou fazer tudo dentro da classe e depois em exibição. E se eu executar isso, vamos ver o ponto no centro. Ótimo, agora é hora de usar as atualizações. No método de atualização, vamos precisar mover X e Y usando cosseno e seno como fizemos no exemplo de campo de fluxo. Então nós realmente inicializar o médico P basicamente disse, me
dê um vetor nu p na posição x no cosseno do ângulo y, seno do ângulo. Então isso é basicamente a mesma coisa aqui, no entanto, estamos nos movendo. Então vou precisar adicionar o cosseno. A posição de extra para a posição anterior ou o ponto de espalhamento, então eu vou fazer a mesma coisa. Agora vamos precisar de um ângulo. Então eu apenas criei e o ângulo vai funcionar como nós estamos fazendo a mesma coisa que fizemos em todo o campo. X dividido por y dividido por escala. Não vou usar unidimensional, bidimensional. E então aprenderemos sobre a rede tridimensional. E então eu estou multiplicando por. Então eu vou inicializar aqueles aqui. Não vamos fazer escala a 300. Digamos dez. Agora isso não vai coincidir porque ainda não adicionamos a atualização aqui. Então eu vou, e se vamos começar com e agora podemos adicionar a velocidade a ele. Isso aumentará a velocidade da luz. Então três, por exemplo, vai ser mais rápido. E quanto mais rápido é dado mortes
muçulmanas porque quanto menor a velocidade desordem os movimentos porque
não há espaço no meio porque você está se movendo apenas 1 de cada vez. Quando temos SP3. No entanto, ele está movendo pixels de varredura de cada vez, então é mais complicado. Então vamos fazer, por exemplo, e você verá que ele tem mais espaço. Isto é também você pode usar a esta taxa e aumenta v Neste torna-se penteado. Então agora vamos ficar com um e ver como ele está realmente se movendo. Como podem ver, os muçulmanos são muito suaves porque temos uma escala muito alta. Se eu diminuir esses 400, vamos dizer que vamos ver mais rotações porque agora ele está se movendo através de pontos mais altos ou mais pontos na onda. E se eu aumentar isso, digamos 50, você verá mais rotações. Então pense nisso como se estivesse lhe dando mais, obtendo a rotação, mais força. Então ele tem a mão superior tipo de mais ângulos e então nós podemos adicionar uma cor a ele também. Então, o que significa? A mesma coisa. Talvez mudá-lo para três para que você possa ver um pouco de mudança de tamanho aqui. E então eu vou inicializar, dar um golpe, cor. E é isso. Isso é tudo que você precisa fazer para obter todas essas obras de arte incríveis que você vê. No próximo capítulo, vamos ver como podemos criar uma matriz de agentes. Mova aleatoriamente pela tela para cada um dos ligandos.
6. Muitos agentes: Agora vamos criar nossa matriz de agentes. E antes que eu possa fazer isso, eu quero adicionar a matriz de cores para que possamos aleatorizar a cor também. Certo, vamos precisar mudar isso para um array. E então aqui, em vez de inicializar o próprio agente, nós vamos inicializar o array e eu vou apenas fazer um 100 por enquanto. E, em seguida, dentro de um loop for que é menor do que o comprimento dos agentes. Nós vamos inicializar nossos agentes no agente i. Então, para cada evento vai ser ou para cada item dentro da matriz vai acontecer. E aqui, posso usar o loop para agente em cada agente. Então, um loop foreach, porque eles não precisam usar o índice. Então eu vou usar para agentes, agentes. Então isso garante que ele vai olhar através da coisa toda mais. Olho direito ou a posição aqui. E não mudamos de agente. E agora todo agente é inicializado essa largura dividida por dois e a altura dividida por dois. E todos eles têm o mesmo movimento porque nós não temos uma velocidade aleatória ou tamanho aleatório. Agora, se eu executar isso, você verá que eles estão todos em cima um do outro. Então eles têm a mesma velocidade e o mesmo tamanho. Então você não verá nenhuma mudança aqui. Mas primeiro vamos mudar o tamanho. Vou aleatorizá-lo de um a cinco. Agora, se eu fizer isso, você verá que é muito melhor porque agora os cinco estão dominando os movimentos. Os outros estão abaixo ou acima, então você não pode vê-los. São velocidades menos aleatórias. Então você pode vê-lo porque agora eles têm velocidade variável. E então alguns deles estão se movendo mais rápido. E você pode ver que talvez um dos menores esteja se movendo mais rápido. E assim ficou claro que isso é menor. Então é como se fosse de tamanho variável ou se é o mesmo que tem interesse, mas não é, são múltiplos. Agora vamos aleatorizar as cores para que você possa vê-las umas sobre as outras na mesma linha. Antes de começar a aleatorizar a aquisição do axônio,
vamos apenas randomizar a posição ou o índice que estamos recebendo deste array. Então eu chamo essa causa, eu vou usar o chamado array. E uma vez que você obter um índice aleatório, por isso será um aleatório das cores que foram para que seja. Então, se eu alguma vez anúncios aqui. Vai ser consistente e ele não precisará mudar isso nos livros. Mas isso vai reclamar porque não é inteiro. Índices têm para inteiros. Então eu vou apenas lançar isso em um inteiro. E agora, se eu rodar isso, veremos que há várias cores. Então, há, de fato, vários agentes em cima um do outro. Então agora vamos realmente randomizar a posição x e y. Então eu queria ser de qualquer área de 0 para a largura, de 0 para a altura. Agora isso deve funcionar com base em Illinois k_l e você é boa tensão, isso vai parecer diferente. Então vamos mudar a escala de ruído deles. Se reduzirmos isso para dez, talvez até reduzirmos o tamanho um pouco para três. Mais uma vez, para atender a velocidade em
vez de, em vez de um para negativo três ou mesmo mais lento. Então eu vou negativo 222 porque eu queria me mover em ambas as direções e com apenas uma direção para o x e y e a velocidade está sendo usada para ambos x e y. ok? E você pode ver que é muito melhor, mas não é. Os veículos estão se movendo para cima, enquanto outros estão se movendo para baixo. E o mesmo vale para x e y. da esquerda para a direita ou da direita para a esquerda, podemos aumentar o número de agentes agora. Então vamos fazer 1000. E na agência mais tem o episódio mais agradável que na verdade eu gosto de ir para o tamanho muito pequeno. Então o meu é geralmente cinco para um ou dois. É se você tem linhas muito finas, dez, parece melhor. E eu vou até mudar o fundo porque o peso parece ser um pouco primeiro às vezes. E cores. Então, tem uma cor de caderno de esboços, há uma pequena página. Parece legal. E você também pode adicionar outras cores. Talvez possamos esperar um ano e porque escolhemos os índices dos colares desse comprimento. Então, qualquer que seja o comprimento que você tem aqui, que
significa que não vai arruinar seus chamadores são usados no declara brilho. Então há fazer tudo dinâmico é muito melhor, muito mais agradável. Agora o branco adiciona um toque agradável ao design. Então eu só preciso fazer agora é brincar conosco, matar. Uma das minhas escalas favoritas não é 1000, então eu gosto de usar 3 mil porque é muito mais suave e então eu gosto de adicionar uma rotação a isso. Então talvez me deixe pegar 30, um Kindle ainda mais alto para 50 e ainda ficar bonito. Ele realmente dá um trabalho de pintura muito abstrato que é ainda mais rotação que você adiciona quando a onda é muito zoom, então espere, aqui. São 3 mil rotações mais suaves ou rotações mais suaves que você vai ter. Então, se eu fizer, digamos 200, você verá que eles estão todos se movendo na mesma direção ou sobre o lado da cena da onda. Mas então eles estão girando com um ângulo muito alto. E assim eles fizeram o melhor trabalho. Podemos também aumentar isto para dizer. E porque não tínhamos ISI e sementes aleatórias, isso vai mudar sempre. Mas se você quiser, você pode vê-lo antes mesmo de ser centralização. Então, sim, está bem aqui. E comece sempre com um 0,
apenas um ano recorde, seja lá o que for. Sono aleatório por causa das cores. Porque a única randomização agora que temos é porque, e você verá que teremos a mesma coisa. Mas agora eu também quero mostrar a vocês se eu reverter isso, outros vão olhar. Então, se eu ter chamado errado é menor, então a senhorita Frank. Então digamos de um a dois mil aqui. E sua força em 300 nanosescala e vai ter mais rotações e menos de um movimento suave. Então, mesmo se você olhar para algumas sondas aqui, há um monte de movimento barulhento, tipo de semelhança aleatória que eles grudam em sua posição, que é muito mais agradável do que é OK, descer 2000 milhões. Você pode ver a rotação deles. Esta é, na verdade, uma das minhas palavras favoritas aqui. É muito mais agradável do que este porque lhe dá variação nas formas também. No próximo capítulo, vamos falar um pouco sobre como você pode adicionar uma terceira dimensão ao seu anúncio.
7. Ruído tridimensional: Ok, então para o ruído tridimensional, você só precisa adicionar mais um argumento para a função de ruído. Então já temos x e y, e a terceira dimensão naturalmente vai ser fácil. Isto é apenas para nomeação convencional para tridimensional, que é x, y, e z. mas sinta-se livre para chamá-lo do que você acha que faz mais sentido para o seu trabalho. Então eu vou apenas adicionar Z aqui e então eu vou inicializá-lo com um valor aleatório. E eu vou conseguir a partir de 2.4. Então eu vou acabar aqui. E Santo Garners função e incrementada aqui em baixo. Agora incrementado em 0,1. E isso é praticamente tudo para a terceira dimensão. É muito simples. E a razão pela qual eu não estou dividindo pela escala de ruído porque eu quero que ele seja influenciado ou você quer que a rotação seja influenciada por mais do que apenas x e y. porque se eu dividi-lo pelo NusScale não vai fazer muita diferença, mas eu quero z para conduzir a rotação um pouco mais. E antes de executar isso, eu só quero prefácio que a maioria do trabalho que eu faço, ou realmente todo o trabalho que eu fiz antes é apenas bidimensional e ruído. Então eu nunca trabalhei com ruídos tridimensionais como em obras de arte produzidas que eu compartilho porque eu ainda estou experimentando com o que parece bom. No entanto, penso que a introdução aqui é muito importante. Embora eu não tenha exemplos com a terceira dimensão. Acho que é essencial para entender a função de ruído. Ok? E eu vou executá-lo. E então começaremos a fazer alguns ajustes para ver o que muda. Agora você verá que a rotação é muito barulhenta porque está girando muito mais do que costumava. Mas podemos corrigir isso alterando o valor aleatório, o valor aleatório inicial para z aqui, ou podemos reduzir, que é o que eu achei mais eficaz é diminuir a quantidade pela qual estamos incrementando Z. Então, se eu fizer 0,01, vai me dar menos rotação do que antes. Então ainda é muito girado, mas como você pode ver, não
é a mesma rotação de antes. Então ele está se movendo um pouco e, em seguida, está girando 360 graus e movendo-se novamente em um movimento muito fluído. Por isso, ele ainda lhe dá um resultado muito bom, mas não parece tão bom com cores. E também não parece tão bom com cores opacas. Então eu vou primeiro mudar este 250 só para ver o que acontece. E imediatamente é muito melhor porque você começa a ver o movimento um pouco melhor. Mas eu ainda não gosto dos resultados com cores. Então eu estou começando a criar uma matriz Clara diferente. Eu vou fazer assim. Agora isso não parece tão bom. Então eu vou mudar isso para 0,001, isso para reduzir a quantidade de rotação que acontece. Então é menos frequente do que antes. E eu posso ver que ele se parece mais com movimentos de cabelo ou movimento de fumaça. E parece muito mais agradável, mesmo com menos capacidade, ficará mais agradável, mas você terá que esperar um pouco mais porque terá que construir a cor. É por isso que eu não trabalho necessariamente com uma terceira dimensão, porque eu gosto muito de trabalhar com cores. Embora isso pareça muito interessante, não
parece tão intrigante quanto um queria ser grande porque meu trabalho tende a ser muito colorido. Mas se você é alguém que trabalha com lote preto e branco, então isso ficaria perfeito mesmo em preto e branco, ou fazer um tom cores porque ele vai dar-lhe um design multidimensional. E você também pode brincar com o barulho matar ou ouvir novamente. Então vamos fazer 3 mil. Você terá mais círculos no design. E então, se eu reduzir isso para dez, podemos ver que há menos rotação ao todo. Mas, em seguida, o z influenciando a rotação, por isso ainda está girando, mas em um caminho muito mais suave. E também está distorcendo, faz moldar ou distorcer o fluxo real do bidimensional de maneiras. E às vezes isso pode dar bons resultados. É uma fórmula muito simples. E apenas mudando as funções agradáveis de uma função de ruído bidimensional para
uma função agradável tridimensional você pode obter com uma infinidade de resultados diferentes. Você terá que brincar com ele, ver o que funciona melhor para você. Brincar com a coloração. E também vamos falar sobre técnicas de clonagem e usar formas diferentes de reinados para fazer o seu design. Mas antes de fazermos isso no próximo capítulo, vou apresentar como fazer este design estático.
8. Ruído estático: Trabalhar com design estático é mais divertido para mim do que trabalhar com um design dinâmico em movimento. Principalmente porque eu gosto de ver os resultados assim que eu executar o programa em vez de esperar que a animação termine. E tornar este design estático é muito simples e os resultados são completamente diferentes. Você está indo para os mesmos caminhos que a animação percorre. Mas vai parecer mais vetor. E vai parecer que você usa curvas
BCA no Adobe Illustrator e fez esse design à mão. E então você será capaz de obter mais variações porque você pode simplesmente executar o programa e salvar cada página que você começa. Ok, então nós vamos começar de onde paramos antes, mas eu vou remover tudo o que fizemos para o ruído tridimensional. Porque, novamente, eu costumo trabalhar com ruído bidimensional. E então eu vou remover isso também. Então nós não precisamos que ele seja transparente e então nós não estávamos deixando o tamanho também. Ok, então para nós criarmos este design estático ou criar vetores são curvas ocupadas fora do movimento. Vamos usar a forma inicial,
uma entrada, e usar o vértice atual dentro dela. E vamos usar um loop for aqui,
porque agora não estamos apenas nos movendo, temos que pensar no movimento como um loop for. Então antes ele estava se movendo porque ele estava
na função de desenho e a função de desenho é basicamente um loop selvagem que nunca termina. Mas eu quero ter mais controle sobre meu projeto. Então eu vou usar um loop for com um comprimento fixo. Então eu vou criar comprimento aqui. Vou torná-lo um inteiro. E começaremos com dez. Então vou deixar o derrame. E a coloração mesma velocidade x e y são os mesmos. Mas em vez de desenhar um avião, vou usar a forma de começar. Forma pode desenhar usando vértices dentro. E eu vou usar o
loop for menor do que os incrementos de comprimento. Agora, se eu desenhar o vértice aqui e então eu entrar aqui em exibição uma atualização dos agentes, o que eu estou tentando fazer aqui, ele vai ser muito quebrado porque eu quero
desenhar cada vértice no valor médio daqui. Então eu vou apenas desenhá-lo dentro da função de atualização. E então eu vou chamar a função de atualização dentro do meu loop for. Então basicamente dentro do meu loop for, toda vez que eu estou recebendo um novo ângulo e então eu estou mudando a posição. Então foi a mesma coisa que fizemos aqui quando chamei os métodos de atualização. Porque dentro da função de desenho estávamos atualizando. Então basicamente o que estamos chamando de função de ruído uma e outra vez. E então estamos chamando x e y, ou estamos incrementando x e y cada vez por seus valores são por esses valores. Então agora, em vez disso, eu vou colocar tudo isso dentro do loop for porque nós não queremos desenhar loop mais ou a função draw que loops para sempre. E eu vou apenas usar vértice curvo é que eu
queria curva termina novamente para colocá-lo em x, n, y. e então eu vou chamar a função de atualização dentro do meu loop for. Então agora nós recriamos o que estávamos fazendo dentro da função da mandíbula. Mas dentro deles foram controlados loop. E antes de executá-lo, temos que ter certeza de que isso não está looping porque não
queremos loops para continuar para sempre. E então eu vou remover a função de atualizações daqui. Ótimo. Agora, porque fizemos a cor de branco jurado para este ambiente tridimensional, seu material volta para as minhas cores. Ok, nós já estamos vendo algo, mas como nosso comprimento para o loop for é muito pequeno e ele começou a participar, estamos vendo linhas muito pequenas. Então, se eu aumentar isso para, digamos, 30, agora estamos começando a ver o design muito melhor. Além disso, eu vou ter que remover o filme, então eu vou apenas fazer ainda. Agora não estamos mais nos enchendo. Parece muito mais agradável. Nós também podemos aumentar as velocidades porque agora se eu aumentar a velocidade, isso só vai fazer meu comprimento ainda maior porque alguns, um vértice para outro, há uma velocidade de fatia pixels em vez de apenas dois. Então, agora, se eu executar isso, você vai ver mais movimento fluido. Então você tem que tipo de equilíbrio entre as velocidades e o comprimento de cada um desses caminhos. Quanto menos velocidade vai lhe dar um comprimento mais curto. Mas então você pode aumentá-lo a partir daqui e você terá resultados semelhantes. Além disso, o que é bom sobre projetos estáticos é que você pode olhar para os pads de sua função de ruído imediatamente. Então, se você quiser testar algo, talvez você queira torná-lo estático e então você começa e você quer os visuais, o design em movimento, então você pode minitest ele usando isso e então vá em frente com quaisquer valores que você de Newton redimensionar irritado string. E se eu fizer o oposto como fizemos antes, então eu vou fazer um 100 aqui e então talvez mil e mais aqui,
você vai ver um design que se parece mais com rabiscos ou os arranhões que dados em um pedaço de papel usando cores. Se você quiser aumentar o número de agentes, você pode fazer isso aqui também. E lhe dará um design mais denso. Mas um dos meus looks favoritos sobre este design é se voltarmos para 300 e depois este, e então reduzir o número de agentes voltar 2 mil, só para que você possa vê-lo melhor. E então, em vez de derrame, nós realmente fazemo-lo preencher e nós não fazemos nenhum derrame aqui. E é aí que as coisas começam a ficar muito, muito interessantes para mim. Agora, o comprimento é muito, muito alto, especialmente para preenchimentos. Quanto maior o comprimento, mais grosso o preenchimento vai olhar. Se você já trabalhou com o Adobe Illustrator e trabalhou com a ferramenta Bessie ou a ferramenta Caneta Curve em qualquer outro programa também. Funciona da mesma forma. Se você tem rotações muito fortes em suas curvas, então você terá sentido que sela as lacunas do primeiro ao último ponto. Então, se você quiser reduzir isso, você pode brincar com o comprimento. Assim, você terá menos rotação para cada chapéus ou cada grupo de vértices que estão conectados uns aos outros. Mas então você vai ter que ver o mesmo olhar no mesmo design usando essas curvas. Então vamos subir. 3030 pode produzir resultados muito mais agradáveis. Agora também posso aumentar a velocidade. Também posso aumentar o número de agentes. Agora parece mais uma ilustração de planos, especialmente se você usar cores que imitam planos um pouco mais. Então, todos os verdes. E então talvez possamos reduzir isso, até aprender. Então temos menos rotação. Vamos até aqui e vamos aumentar os lindos 3 mil celtas, então temos menos rotações também. E então eu vou aumentar agora a rotação um pouco, ou a força de seus valores de ruído ou podemos brincar com ele. Podemos descer com os pés dele. Você também pode ir de um a dois. Não precisamos ir em direções, apenas uma direção. Ainda produzirá resultados muito agradáveis. Você pode ir até 1000, e isso é literalmente o que eu faço todas as vezes. Quero ver um design que pareça bom. Eu tentei um blotter valores de mesa juntos até algo clicar ou até que algo aconteça. É por isso que eu também gosto de trabalhar com sementes de ruído, a semente aleatória. Acho que essa é uma das razões pelas quais não estamos conseguindo um equilíbrio diferente. Sim. Agora estamos recebendo muitas variações diferentes. Nós também podemos aumentar isso para um 100 indica lá para que você possa obtê-los mais projeto de rotação, mas usando este estilo vetorial. E agora você terá esse design, que também parece muito, muito interessante. Eu também quero introduzir no próximo capítulo como brincar com formas
neste design direto para chegar a projetos de sua ellen com
base nas formas que você está usando em seguir os caminhos da função de ruído.
9. Pincéis diferentes: Eu falei sobre a criação de formas personalizadas no meu curso anterior. De volta ao básico. Podemos fazer isso aqui para pintar esses movimentos fluidos com algumas formas interessantes. Isso é muito semelhante à criação Photoshop
personalizado ou procriar pressões se você já fez isso, cada pincel pode dar uma textura distinta produzindo resultados de variante em vez de você desenhar,
no entanto, o computador é, eu vou criar um pincel com você e depois eu vou mostrar-lhe alguns dos meus projetos com outros pincéis e levá-lo brevemente através dos componentes pincéis. Ok, a partir de onde paramos no capítulo anterior ou na lição anterior, só
precisamos mudar a forma no momento em que estamos desenhando usando o vértice atual. Porque mudamos para o nosso design dinâmico em um design estático. E vamos continuar com isso. A única diferença é que vamos criar uma função de pincel. Então vamos criar isso aqui. Vou chamar-lhe um pincel. E vai ser um método dentro de nossa classe ou classe agente. E para o meu pincel, vou precisar de uma exposição e da posição y e também de uma contagem. A contagem não é necessariamente necessária aqui, mas eu gosto de adicioná-la para adicionar esse efeito aleatório no pincel. Então vamos começar com um x e y primeiro. Então eu vou fazer posição flutuante x, eu vou apenas chamá-lo. E o outro vai ser chamado de posição. Por quê? Porque eles não querem me confundir com o X e Y dentro da minha turma todos aqui. Então eu só mudei. E agora aqui vamos criar o nosso pincel. Então ele disse que queríamos criar um pincel de círculos aleatórios. Então, para um pincel de círculos aleatórios, vamos precisar de alguns círculos. Então vamos começar criando realmente o círculo e, em seguida, vai mudar isso em uma abordagem mais dinâmica. Então, vamos começar com,
digamos, secando três círculos. E então eu vou colocar o primeiro na posição aleatória de cinco a dez, e então outra posição aleatória para o Y de cinco a dez. E então eu vou dar-lhe um tamanho aleatório porque círculo leva três argumentos em oposição à elipse que leva quatro. Porque é um círculo, a largura e a altura são as mesmas. Então será apenas um terceiro argumento em vez de um terceiro, quarto argumento para largura e altura. Então aqui eu vou apenas fazer um ohm cinco, ou de um a cinco. Então eu vou pegar um tamanho aleatório de um a cinco, ok, e eu vou fazer a mesma coisa para todos eles. A razão pela qual eu disse de cinco a dez é porque eu quero conter esta forma em um quadrado porque um pincel geralmente tem seu próprio recipiente. E para fazer isso, eu vou ter que empurrar uma matriz e depois traduzir toda essa caixa de formas. Então, todo o pincel usando a posição x e a posição y. Então eu vou apenas traduzir e então a posição x e a posição y. E porque eu Tudo, eu quero que a tradução só aconteça para cada fresco separadamente, eu vou ter que empurrar uma matriz para cada um deles. Então empurre matriz e matriz pop. Então isso produz uma nova tela para nós e então traduzirá isso para onde eu quiser e dentro dela. Ou todo esse pincel vai ser três círculos de posicionamento aleatório. E eles vão começar a partir da posição x e posição y. Então cinco a dez são na verdade cinco pixels da posição x e dez pixels da posição x. E o mesmo vale para y também. Ok? E agora vamos chamar o pincel aqui em vez do vértice atual. E vamos fazer x e y, como fizemos com o vértice atual. Eu vou aumentar um pouco o tamanho aqui porque eu não acho que vai ver claramente. E eu vou diminuir o comprimento para apenas um porque eu quero acontecer aqui. E então eu vou remover a forma inicial e comércio porque nós não estamos desenhando com vértices mais. E eu também removi o não Stroke e eu tive um golpe de preto. E então aqui eu quero usar, digamos dois agentes porque eu realmente quero ver claramente. Ok? Então isto é secar três círculos um em cima do outro e este também. Eu quero mudar a aleatoriedade, então eu vou fazer 15 a 20 aqui, e então 22, digamos 30 aqui. Porque eu quero mudar, mudá-lo no eixo x um pouco para que possamos vê-lo. Assim, podemos ver que existem três círculos. Ok? Então aqui estão três círculos e este também é três círculos. E à medida que o
executarmos, obteremos locais aleatórios para o eixo x e o eixo y. Agora, em vez de desenhar os três círculos como este, vou transformá-lo em um for-loop. Então eu vou fazer para inteiro i igual a 0 a normal for-loop e i é menor que, digamos três. E vamos incrementá-lo, e então teremos apenas um círculo. Então agora nós reduzimos nosso código por duas linhas para linhas
desnecessárias porque desta forma eu tenho os três círculos e todos
eles têm localização aleatória para x e y. ok, e se nós
rodarmos isso, agora, nós vamos obter semelhante resultados para o anterior. A única diferença aqui é que antes de termos um intervalo diferente para aleatório. Aqui temos o mesmo alcance. Então talvez você possa fazer o alcance um pouco maior para que você obtenha muito mais variação e o posicionamento. Então, se eu fizer 15 a 20 para o eixo x aqui, ou 5-20 na verdade. Então eu estou apenas aumentando o alcance e você
verá que o posicionamento tem um pouco mais de variação. Então eu vou levar de volta para dez. E aqui é onde as contagens entram ou um parâmetro count, porque eu quero que isso não seja apenas três, eu quero que seja um valor aleatório baseado no que eu dou aqui. Então eu vou apenas fazer contagem de inteiros. E eu vou colocar isso como o comprimento para a matriz. E aqui vou dizer valor aleatório de um a cinco. Então eu vou ter. Um círculo, 23 até cinco, e estou arredondando. Então, na verdade não é até cinco, é para quatro. Se você quer que seja até cinco, então vá até seis. Mas vou ficar com cinco. E então você tem que lançá-lo em um inteiro. Porque aqui temos um inteiro dentro do loop for
porque a contagem é sempre não decimal quando se trata de coisas como esta. Então eu posso desenhar meio círculo, por exemplo, três círculos na metade, então ele tem que estar dentro. E agora se eu executá-lo, eu vou ter 123 ou quatro círculos em cima um do outro. Então, se eu for até aqui e fizer 100, vou conseguir muito mais. E então eu posso aumentar o comprimento novamente para, digamos, dez. E podemos remover o traço para que possamos ver melhor o design. E eu também vou aumentar a velocidade porque eu quero mais lacunas
entre os círculos para que ele possa obter o efeito desse pincel. Então, aumentou isso para 20 e aumenta a força do ruído para mil porque eu quero esse movimento fluindo e reduza isso para dez. E então eu vou até fazer este 1000 ou até 4 mil. Agora estamos recebendo que círculos aleatórios pincel no design. Nós também podemos reduzir o tamanho agora porque eu não tenho muito grande de antes. Então, de um a cinco, eu diria que é muito bom. Aleatório só vai copiar e colar uma maneira diferente de colorir isso, porque eu quero vê-lo um pouco melhor porque o efeito nem sempre, ou os efeitos de outros pincéis nem sempre parece bom quando é da mesma maneira ou colorir. Então você tem que às vezes apenas mudou a forma como você está colorindo seus desenhos, a fim de ver os efeitos do que você está criando. Às vezes, o que você está criando realmente parece legal se talvez você use apenas duas cores. Mas aqui, eu realmente vou chamar esta paleta para. Em vez de alterá-lo três vezes aqui, eu sou apenas pode mudar o nome da matriz. Então o que estou fazendo aqui é mapear o seno do ângulo
aqui de um negativo para um para 0 para o comprimento do ponto de paletes. Então eu quero mapear os valores do ângulo seno. Então, seja qual for o resultado da função de ângulo senoidal, quero que ele seja mapeado para essas cores ou para os índices dessas cores. E os índices vão de 0 a um a menos do que o comprimento do ponto da paleta. Então, estou restringindo isso aqui. Apenas para evitar quaisquer valores enganosos são quaisquer erros. Então eu vou apenas dizer novamente, índice vai ser igual, restringir o índice de 0 para comprimento de ponto da paleta menos um. Então, nunca vamos obter array fora da exceção vinculada. E então eu vou usar isso para cores. Então, em vez de colorir aqui usando o aleatório, que eu vou realmente mudá-lo para mais tarde. E sim, em vez de fazer isso aleatoriamente aqui, eu vou fazer isso dentro da função de atualização. E eu vou chamar a paleta com o índice que acabamos de criar. E, a propósito, todo o código para os diferentes pincéis e a técnica de coloração serão vinculados na seção de recursos deste curso. Então vamos fazer isso e ver o que acontece. Ok, eu tenho que mudar o preenchimento daqui para aqui porque é onde nós estamos mudando a cor antes. Não estamos fazendo nada com a cor. E agora deve funcionar muito bem. Então agora você pode vê-lo tipo de cores pastel de óleo se você já trabalhou com eles, ele tem uma textura muito cerosa e isso me lembra disso. Então você pode aumentar as velocidades, digamos 15. E você pode brincar com ele. Você pode ver que a textura é mais granulada desta forma porque, como eu disse antes, mais velocidade você tem, mais espaço entre cada forma um do outro. E novamente, brincar com a couve de
ruído e os pontos fortes de ruído pode produzir muitos resultados diferentes. Então, se eu fizer um 100 aqui, você verá um design muito diferente. Vamos reduzir isso para até seis. Vou apenas remover o branco porque eles não gostam. Sim, isso é basicamente o que você precisa saber sobre criar pincéis. Tudo que você precisa fazer é criar seu pincel aqui, e então você também pode criá-lo aqui em sua própria função. Tudo bem, no entanto, você precisa chamá-lo aqui. E se você está fazendo a coloração aqui, então lembre-se de fazer o preenchimento ou acidente vascular cerebral aqui, mas isso não é necessário. A única coisa necessária é muito seco dentro da função de atualização após o seu ângulo e x e y, porque então você vai chamar a função de atualização dentro do seu loop for, dentro do seu método de função de exibição dentro do seu Classe de agente. Agora vamos voltar para as outras formas. Agora que você viu como usar seus pincéis personalizados, aqui estão alguns exemplos de outra respiração é um criado e os resultados que eu tenho. É divertido brincar com sombras às vezes para dar profundidade ao seu trabalho. Nestes exemplos são usados o pincel feito de uma vista grossa clientes, em seguida, copiou o mesmo pincel com algum deslocamento, criando um efeito de sombra. Você só precisa colorir a forma superior com sua matriz de cores pois sua parte inferior deve ter uma tonalidade escura para criar esse efeito de sombra. Muito simples, mas muito interessante. O truque com este, porém, é aumentar o tamanho do passo e diminuir o número de agentes para que ele não fique muito lotado. Veja como a função se parece. Eu também queria criar um pincel fino pinceladas para imitar aqueles pincéis quadrados desgastados. Eles me irritam um trabalho analógico. Mas para imagens geradas por computador, elas eram muito agradáveis. Eles são os mesmos que o pincel círculos aleatórios, mas com linhas em vez disso, dar uma olhada na função e tentou recriá-lo. Esses são apenas alguns que eu inventei enquanto eu estava planejando este curso. É hora de criar o seu e criar algo único para você.
10. Técnicas de colorir: Um algoritmo pode produzir tantos resultados únicos alterando suas técnicas de coloração além de selecionar aleatoriamente cores de uma matriz ou mapear cores para posição e rotação, você pode pegar cores de uma imagem interessante obtendo as cores de cada pixel na mesma posição que suas formas, basta
importar a imagem, redimensioná-la para caber sua tela de preferência na mesma proporção que sua tela de desenho. Sinta-se livre para ser não convencional e esticá-lo. Em seguida, use o GetMethod na classe PMF para pegar sua cor do pixel subjacente. Estes exemplos mostram algumas de minha outra arte generativa como entrada. Uma é gerar cores durante a inicialização dos agentes e a outra é agarrando as cores à medida que se move, produzindo resultados variados. Outra técnica que eu peguei de Taylor Hobbes posts em seu site é colorir com base em algumas cores espalhadas na tela. É um processo longo, mas a essência é dispersa e exibe objetos com algumas cores armazenadas aleatoriamente. Em seguida, verificando a distância entre seus agentes móveis e esses objetos, a distância mais curta determina a cor do seu agente em movimento. Agora você pode ler mais no site Hubs Tyler como sua técnica tem um pouco mais de passos para ele. Aqui está um exemplo em que eu rastreei a distância constantemente enquanto os agentes se movem, produzindo uma textura Voronoi. Você também pode capturar cores de linhas de cores
na tela horizontalmente ou verticalmente usando a propriedade x ou y. É semelhante ao mapeamento da posição, mas essa abordagem manterá as cores relativamente incomparáveis, criando uma aparência de gradiente. No entanto, quanto mais tempo este programa for executado, mais mescladas serão as cores e o efeito de gradiente se dissipará. Você pode conseguir isso usando esta equação, por exemplo,
para seus índices de paletas, pois isso dá o restante da divisão de x por r paletes de comprimento de 0 a um menor do que o comprimento da matriz de paletas quando arredondado. Como x está se movendo com incrementos muito pequenos, isso lhe dará colunas muito finas. Para salvar que você pode dividir x por r largura colunas desejadas. Eu escolhi dar cada coluna de cor dividindo x pela largura da tela dividida pelo comprimento dos meus paletes. Isso pode produzir valores desejados por alguém. Portanto, um método de restrição é conselho para manter sua restrição de valores de índice entre 0 e o último índice de sua matriz de cores. Estas são algumas das obras de arte resultantes desta técnica de coloração. O próximo método de coloração é bastante interessante, pois produz texturas semelhantes à nuvem, dando mais profundidade à sua arte. Você pode obter a inclinação usando esta fórmula, que é muito semelhante ao ano anterior. Aqui, estamos usando o ângulo do movimento em vez da posição x e y. Aqui estão os resultados. Por último, mas não menos importante, para brincar com cores é usar interpolação de cores. Eu falei sobre isso um pouco mais em detalhes em minhas costas para o curso básico na seção de cores, sinta-se livre para verificar isso para obter mais informações. A justiça que a função de cor de sinopse cria uma matriz de cores usando apenas duas cores. Para o meu design, eu criei essa função de gradiente para criar uma nova paleta interpolando entre cada cor subsequente na minha matriz original. Isso permite uma transição de cores mais suave à medida que os agentes se movem, você pode usar qualquer uma das técnicas anteriores para usar essa nova paleta. Eu uso esta fórmula para o meu índice para criar uma transição de cor oscilante atualizando meu ângulo de função senoidal por um no método de atualização e dividindo-o por um 100 para escalá-lo para que haja mais tempo para cada cor aparecer. Não é a minha técnica favorita com este programa, mas brincar com ele. Você pode achar que é um valor para você. Há definitivamente muito mais que você pode fazer em termos de colorir seus desenhos. Mas espero que essas técnicas sejam suficientes para expandir seus horizontes e fazer seus sucos criativos fluírem. Estou animado para ver o que você inventou.
11. Como salvar imagens: Agora nós criamos, Oliver projetos, estático e dinâmico. E é hora de salvar. Eu falei sobre salvar seus projetos ou algumas das maneiras que ele pode salvar seus projetos em meus outros cursos. Mas vou repetir aqui. Porque ele também quer mencionar quando salvar uma animação, quando salvar uma única imagem estática ou foi salvar uma imagem vetorial de alta qualidade. A primeira coisa que eu costumo fazer é salvar imagens estáticas, e às vezes faço isso no tamanho do meu teste. Então, 500 por 500, como este agora. Só para ver como as coisas ficam. Principalmente porque agora podemos ver que as cores são realmente brilhantes, mesmo que as cores que eu escolhi são um pouco silenciadas do que estas. Mas, por alguma razão, a vista aqui mostra cores muito, muito brilhantes. Mas uma vez que você salvá-lo, as cores vão ficar um pouco silenciadas. Talvez queiras mudá-las. Você realmente gosta dessas cores brilhantes, então você terá que iluminá-las e fazê-lo novamente. Então testar usando um tamanho que é pequeno, como este é um bom caminho a seguir. Então, se você quiser salvar apenas um PNG, você pode fazê-lo desta maneira. Então vamos abrir uma nova guia. Vou chamar de “salvar”. E agora dentro dele eu quero salvá-lo quando as teclas pressionadas, especialmente com este trabalho porque eu tenho que esperar que ele corra e ver os resultados que eu gosto. E depois quero salvá-lo. Terei que esperar até certo ponto e clicar em um botão. Então você pode clicar com o mouse se quiser. Você pode escolher MousePressed ou MouseClked como a função que deseja procurar como entrada. Mas o que eu gosto ou o que eu prefiro é usar a tecla pressionada. A razão para isso é porque se eu quiser salvar a mesma imagem como uma imagem vetorial, e ainda assim é uma imagem Raster, então é muito mais fácil para mim usar KeyPressed porque então eu vou
procurar a letra s Se eu quiser salvá-la como um PNG, mas então eu vou pedir a letra P para salvá-la como um PDF, que é o formato vetorial. Aqui nós só vamos salvá-lo como uma imagem raster, como um PNG. Então nós não temos que pensar muito sobre isso, mas eu ainda gosto de mantê-lo um hábito de apenas colocá-lo dentro de uma função de tecla pressionada. Então eu vou apenas fazer a tecla pressionada e pressionada é realmente capital, ok? E eles só usarão se e então a chave de palavra-chave. Então a tecla procura por qualquer letra ou qualquer caractere que você empurra no teclado. E para personagens, você tem que fazer uma única citação. E eu estou dizendo, OK, se a tecla é a tecla que é pressionada, então faça isso. Então eu vou salvar meu PNG, mas eu quero salvá-lo primeiro dentro de um arquivo de saída. Gosto de manter o meu trabalho organizado. E depois mais vezes TAM e mais ponto PNG. A razão pela qual eu uso timestamp aqui porque isso é o que eu aprendi com o design generativo, o livro. E eu tenho feito isso desde então porque
faz mais sentido em salvar seus arquivos e
garante que você não sobrescreva seus arquivos antigos porque não há data e hora como os outros. Assim, você pode apenas salvar seus arquivos sem se preocupar em nomeá-los. E você também sabe quando você realmente os criou. Então isso também é uma vantagem. Agora, a fim de criar a função timestamp, eu apenas escrevo string porque eu estou retornando uma string porque é isso que eu estou adicionando aqui, concatenando com as outras duas strings. E antes de começarmos a fazer isso, quero mostrar que ainda não tenho arquivos salvos. Então esta é a minha pasta. Tenho o meu ficheiro de agente, que é a minha escuta aqui. Muitos agentes, que são as minivans tocam aqui, que é o nome do arquivo principal. E depois o meu ponto p guardado, que é a minha torneira de segurança aqui. Ok, agora podemos continuar a criar as funções de carimbo de data/hora. Então vou fazer o carimbo de data/hora. E dentro dele, eu vou obter uma instância do calendário, que é uma classe da classe utilitário Java. Então, vamos realmente importá-lo primeiro. Então não reclama. Então eu vou apenas importar algo chamado java.util para você para Lee e depois calendário. Agora temos a aula de calendário. E eu posso dizer da classe do calendário, dê-me uma instância chamada agora, e você não criá-la dizendo novo calendário. Você realmente diz calendário. Então você tem que chamar a classe novamente e, em seguida, ponto obter instância. E agora podemos formatá-lo. Então eu vou apenas retornar o formato de ponto de string para que você possa formatar a string que obtemos a partir daqui. Dentro de um formato. Você formatar, ou você escreve seu formato aqui usando uma string. E então aqui você escreve sua variável aqui. Então aqui vamos escrever a string de formato. E a cadeia de formato vai ser o sinal de porcentagem e um e, em seguida, sinais de dólar. Então isso é direcionar para isso basicamente. Então estamos dizendo para pegar o valor aqui e depois me dar o ano. Então o ano é T y e isso vai me dar uma urina de dois dígitos. E então eu vou fazer a mesma coisa. Então eu vou copiar esta parte porque ela está direcionando este argumento aqui, que é o primeiro argumento dentro do formato, porque ele pode adicionar ainda mais argumentos aqui. Então este vai ser o primeiro argumento. Este é o segundo argumento para isso formatá-lo, mas nós só temos um. Então vou fazer isso de novo. E então desta vez eu quero o mês, e então eu vou fazê-lo novamente e desta vez eu ganhei o dia e então eu vou fazer um sublinhado. Então eu recebo o Ano, dois dígitos do ano, dois dígitos do mês, e depois dois dígitos do dia. E então eu quero um sublinhado e depois o tempo. Então, se você salvar várias imagens no mesmo dia, ele vai ter diferentes momentos usando os segundos também. Então, se ele salvar no mesmo minuto, ainda
vai ser diferente e não vai sobrescrever o antigo. Então temos que incluir novamente isso e depois a hora. E isso me dará os dois dígitos da hora e dez minutos e depois segundos. Então agora, quando dizemos que vamos ver dois dígitos de cada ano, mês e dia, e então nossos minutos e segundos, e nossos minutos e segundos não serão capital. Você pode encontrar este ou outros formatos na documentação Java. Então, se você disser formatos de string, ele, você terá tudo isso e como você pode formatar seu Spanx, e isso é praticamente tudo. Então, agora, se eu executar isso novamente, então eu tenho que salvá-lo e executá-lo. Agora, eu vou deixá-lo correr um pouco e então eu vou apertar a tecla S enquanto isso é ativado. Então, se eu voltar aqui e eu quiser
salvá-lo, ele não vai salvar, ele vai escrever S aqui. Por isso, temos de ter a certeza de que isto está activado. Uma vez que você executá-lo na verdade, ele é apenas ativado automaticamente para que você possa apenas pressionar o ascii. Então eu vou pressionar o ASCII e agora vamos voltar para a nossa pasta. E nós podemos ver a pasta de saída agora, se as pastas de saída já foram criadas, que ele vai apenas salvá-la dentro dela. Podemos ver a imagem aqui, e a imagem tem o nome que formatamos. Então tem 20. Então 20-20 do que 18 de outubro e sublinhar 1705 horas em 26 minutos e depois 24 segundos. Então, agora mesmo que eu volte e salve outra versão disso, eu vou pegar a outra. A única diferença entre esses dois é que este é em este foi criado às cinco horas e 26 minutos. E isto foi criado às cinco horas e 27 minutos e nove segundos da sua contabilidade. Essa é a maneira mais fácil de ver a imagem uniforme. Mas e se você quiser uma imagem de alta qualidade que você deseja compartilhar? Então isso eu só crio sempre que testo meus arquivos ou testo minhas imagens. Às vezes até testo com a resolução que eu preciso porque talvez mais tarde realmente gostei dos resultados que eu obtive daqueles testes que eu quero usar. Então eu gosto de mudar ou eu gosto de código e 500 por 500. E uma vez que eu estabeleço o design que eu gosto, eu apenas levo até 1920, por volta de 1920. E, na verdade, será cortado da tela. Mas você pode ver o design claramente. As linhas são um pouco SAN ou eu não tenho tantas agências que eu quero. Então eu posso voltar e melhorá-lo. E mesmo apenas ver uma parte da tela não vai arruinar o design tanto para você, porque ainda é muito aleatório. Até mesmo a função de ruído está produzindo valores aleatórios. Por isso, não vai ser sempre o mesmo. Se você quiser que seja o mesmo, você pode definitivamente usar a semente ruidosa e aleatória. O que você faz é flutuar sementes e, em seguida, uma longa semente aleatória. Nomes que lhes queiras chamar. E então aqui eu vou dizer, na verdade eu vou apenas fazer isso aqui. E eu vou torná-lo um inteiro em vez disso. Você não precisa de um carro alegórico. E então aqui eu vou fazer sementes aleatórias. E vai igualar o valor aleatório das sementes que obtemos. Então este é o valor máximo que iríamos usar. E então isso vai reclamar porque ele diz tipo incompatibilidade porque aleatório vai
produzir um valor flutuante quando ele precisa ser longo porque assento aleatório como longo. Então eu vou apenas lançá-lo em um longo. E a razão pela qual eu estou usando o tipo de dados longo é porque o barulhento não aceita um flutuador exceto por muito tempo. Então eu vou apenas usá-los aqui. Sementes aleatórias e eu vou usar a mesma coisa. Você pode criar outro para assento aleatório, mas eu quero usá-lo aqui e então eu vou imprimir a semente aleatória. Então, sempre que você encontrar um design que você gosta e você quer voltar para ele. Pode guardar este lugar aqui. Então agora eu imprimi a semente semeada dentro da semente de ruído é realmente 974, e dentro da semente aleatória é 974 também. Então, se você quiser repetir este design, talvez você queira salvá-lo em uma escala maior para alguém que o solicitou, você pode voltar para as sementes e você pode salvar as sementes em seu nome de arquivo. Ok, eu só queria incluir isso em salvar o arquivo porque é meio que parte de como eu salvei meu arquivo às vezes. Agora vamos salvar uma animação. Então vamos dizer que eu quero ter aquela animação que está acontecendo. Então eu vou voltar para 500 por
500 e realmente mostrá-lo para que você possa ver os desenhos melhor. Digamos que eu queira salvar a animação. Agora, se eu quiser salvar um quadro, eu posso apenas apertar S a qualquer momento e ele vai salvá-lo. Mas se eu quiser salvar a animação, eu vou fazer isso aqui embaixo. Então, após a função draw, e é claro que a função draw tem que loop porque eu quero dizer que é uma animação. E então eu vou fazer dizer quadro. Então é o mesmo que seguro. Mas aqui, quadro seguro basicamente salva todos os quadros que aconteceram em seu design. E adicionará números de um a qualquer quadro em que você parar. Então vamos dizer que eu quero pagar dígitos, nome de
arquivo, porque geralmente eu iria até os milhares quadros. Então até 2 mil, às vezes ainda mais só para ter o tempo que eu quero. E depois apanhou o PNG. Então isso é tudo que você precisa fazer para salvar a animação. Eu também gosto de dar-lhe uma saída diferente, especialmente se eu tiver uma saída original assim ou pasta, pasta de saída, quero dizer, então saída dois, Eu vou chamá-lo porque eu já tenho uma saída e então ele vai dizer ventilação. E agora se eu executar isso e ir para minhas saídas. Dois, verei os quadros salvando. Então, estamos até 100. E você pode ver que o ismo de animação é muito mais lento herdar porque ele está salvando cada quadro, então ele está tomando seu tempo enquanto salvá-lo. E agora vamos dizer que eu quero parar aqui e proprietário para fazer estes e animação, Eu vou ter que ir para o menu de processamento. Não está sendo capturado na tela aqui, mas vou mostrar exatamente onde você pode encontrá-los. Está no menu Ferramentas, chamado Movie Maker. Então, se você clicar no criador de filmes, tornou-se apenas arrastar uma pasta com arquivos de imagem para o campo abaixo. Então vou arrastar a pasta em vez de navegar. E agora tem o caminho. E é por padrão 60 quadros por segundo porque isso está sendo executado em 60 quadros por segundo, mas pode mudar isso. Então, se eu quisesse ser um pouco agitado, posso fazer taxas de quadros 12. Eu fiz animações com uma taxa de quadros de um por segundo para torná-lo como um relógio em movimento. E então eu quero que a compressão seja uma animação. Você pode torná-lo uma sequência jpeg ou seqüência PNG, mas eu vou apenas fazer uma animação e o mesmo tamanho que o original. Então não vai olhar para a largura e altura. Não se preocupe com isso. Se você remover isso, ele vai pedir que você mude. Mas se dissemos o mesmo tamanho que o original, ele vai nos dar 500 por 500 e para este. E, em seguida, se você quiser arrastar um arquivo de som para o filme que você está criando ou para a animação. E você pode arrastá-lo até aqui. E agora eu posso apenas dizer para criar o filme e ele vai me perguntar onde guardá-lo. Então eu vou apenas salvá-lo dentro da mesma pasta. Vou guardá-lo aqui em cima. Então, agora acabou de criar o filme aqui. O único problema que eu encontrei ultimamente com este, com as versões mais recentes do Mac é que ele não vai jogar em tempo rápido. Então o que eu faço é apenas ir para qualquer software que transforme qualquer arquivo de filme em um mp4 e interesse converter isso. Então sim, é assim que se cria uma animação. E agora vamos falar sobre como salvar um PDF ou um formato vetorial. Salvar um PDF para salvar um formato vetorial produz imagens de
alta qualidade, pois ele pode converter seus arquivos PDF em imagens PNG. E isso será uma qualidade muito maior do que apenas salvá-lo imediatamente. E sem também fazer todas as alterações quando você altera o tamanho do seu Canvas. Então, basicamente, se eu quiser salvar isso como 500 por 500 não vai salvá-lo como 500 por 500 porque ele vai ser uma imagem de muito alta qualidade porque
ele salvou como um formato vetorial em vez de uma imagem raster. Então, se eu quiser salvá-lo, vou apenas copiar e colar tudo o que criamos aqui. Então eu não tenho que criar o carimbo de hora novamente. E eu vou criar uma nova guia e apenas chamá-lo de salvar. E então eu vou fazer a mesma coisa aqui. Eu também tenho que fazer. O calendário. Ok, então agora tudo é igual. E se eu executar isso de novo, eu posso facilmente salvar isso e ele vai salvar. Então agora minha saída aqui e você pode ver o que a imagem é muito pequena. Mas como esta é uma imagem estática, eu posso facilmente fazer um PDF. Então, a fim de fazer um PDF, ou eu salvar um arquivo PDF, eu vou apenas fazer a mesma coisa que eu fiz aqui. Mas desta vez eu vou fazer se chave é P. Então, se é Pete e eu quero salvá-lo como um PDF e não vai ser este vai ser um registro de início. E gravar. Então vou começar a gravação aqui. E então quando eu apertar essa tecla, eu quero que termine necessário. E então comece de acordo. Ele requer mais argumentos e registro não requer nenhum argumento, então eu vou ter que apenas fazer PDF como os formatos e então eu vou fazer o que eu fiz aqui. Então vou copiar e colar esta parte. E então eu vou fazer PDF em vez de PNG. Então é basicamente a mesma coisa. Eu queria estar dentro da minha pasta de saída. E a função de carimbo de data/hora também está aqui. Mas agora, se eu quiser salvar
isso, não vai salvar minha imagem. Então vamos dizer p e então eu escrevo E. Primeiro de tudo, ele não vai salvar porque nós esquecemos de importar a biblioteca PDF mostrou uma biblioteca PDF
é basicamente uma biblioteca de processamento de bibliotecas importar de processamento de ponto PDF. E depois quero tudo. E então se eu rodar isso de novo, então eu faço p e então eu vou fazer e. E agora este é o meu PDF. Então meu PDF é uma tela vazia. Realmente não fez nada porque começou a gravar. Mas então não há nada aqui para
gravá-lo porque ele não procura por isso aqui. Ele tem que saber o que está sendo gravado e isso tem que ser abrangido entre o registro inicial e o registro. Mas não há nada realmente ensopado entre eles. Então eu vou chamar a função de configuração porque eu preciso de tudo aqui, porque eu preciso da cor de fundo. Preciso do número de agentes ou da inicialização dos agentes, e então preciso do movimento aqui. Então eu vou fazer a configuração e depois desenhar. E agora se eu rodar isso novamente e então eu clicar na letra PI, e então você verá que o pdf foi criado, mas não terminou porque nós realmente não terminamos a gravação. Então, se eu for novamente, ativar isso e, em seguida, apertar o E, você verá isso mudando para o design. E então você pode ver que é uma imagem de alta qualidade. Então você pode converter isso em um PNG. Há muitas plataformas onde você pode fazer isso. Eu costumo fazê-lo dentro do meu Mac porque eu crédito uma ação onde eu posso converter isso em um PNG diretamente aqui. E então ele salva dentro de uma pasta que eu pedi para salvar dentro de minhas ações. E salva-o como um PNG. Essa é uma história totalmente diferente, mas mudar ou converter isso em um P&G não é realmente uma tarefa difícil. E você pode encontrar um monte de plataformas que fazer. Então, sim, isso é praticamente como você salva um formato vetorial. E se você quiser abrir isso como um vetor, basta clicar ou clicar com o botão direito do mouse e, em seguida, abrir com o Adobe Illustrator. E vai abri-la para você e mostrar-lhe como abrir e manipular o trabalho no meu outro curso. Então você pode ir e acompanhar isso na minha Introdução a janeiro de arte, onde você pode criar um Grids e lá você pode aprender como abrir isso no Illustrator e editá-lo. Ali.
12. Inspiração e mais informações: Não importa quantos exemplos e dar a você, eu sou apenas uma pessoa com um cérebro. Então, para inspiração sobre o que você pode fazer com informações deste curso, visite ou causar Abrir página de processamento. Ele tem uma tonelada de trabalho incrível com barulho. Um dos meus favoritos é este relógio. Ele usa a função de ruído para destruir sua imagem. Parece muito complicado, mas o código é bastante claro e direto. Este artista usa p5 js, que é equivalente ao processamento em formato JavaScript. É muito fácil de decifrar, pois ambos usam os mesmos métodos. Mas se você ficar preso em qualquer momento, sinta-se livre para me perguntar na seção de discussão ou verificar documentação de
ambos os idiomas para obter algumas respostas. Agora continuo voltando ao trabalho de Tyler Hobbes, pois Ele nunca deixa de me surpreender. Ele tem um artigo e trabalhando com campos de ruído e fluxo que tem algumas informações valiosas e técnicas
interessantes de resíduos e distorcem os movimentos dos agentes. O jeito que ele é, é que o campo de fluxo é diferente do que eu uso. Se você visitar a natureza do site de código por Daniel remessa, que é outra grande referência para trabalhar com campos de fluxo. Você pode entender melhor como Tyler Hobbes usa campos de fluxo. O conceito aqui neste curso, ali, e as referências são semelhantes, mas o processo é diferente. Se você encontrar mais referências,
por favor, compartilhe-as com seus colegas de curso. Nas notas deste vídeo ou na seção de discussão, estou sempre à procura de novas inspirações e desafios. Além disso, sinta-se livre para compartilhar seu processo com todos na seção de discussão ou em suas notas de projetos. É bom obter e dar feedback construtivo. Vamos ajudar uns aos outros a progredir.