<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Introdução à Programação 1 e 2 (2009) &#187; strokeCap</title>
	<atom:link href="http://www.brunocampagnolo.com/2009ip/tag/strokecap/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.brunocampagnolo.com/2009ip</link>
	<description>PUCPR &#62; Design Digital &#62; 1o e 2o Períodos</description>
	<lastBuildDate>Fri, 18 Dec 2009 10:33:47 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Aula 01 &#8211; Introdução à Programação de Computadores usando Processing</title>
		<link>http://www.brunocampagnolo.com/2009ip/2009/03/03/aula-01-introducao-a-programacao-de-computadores-usando-processing/</link>
		<comments>http://www.brunocampagnolo.com/2009ip/2009/03/03/aula-01-introducao-a-programacao-de-computadores-usando-processing/#comments</comments>
		<pubDate>Tue, 03 Mar 2009 18:06:47 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[aulas]]></category>
		<category><![CDATA[arc]]></category>
		<category><![CDATA[aula01]]></category>
		<category><![CDATA[background]]></category>
		<category><![CDATA[beginShape]]></category>
		<category><![CDATA[bezier]]></category>
		<category><![CDATA[comentários]]></category>
		<category><![CDATA[coordenadas]]></category>
		<category><![CDATA[curve]]></category>
		<category><![CDATA[ellipse]]></category>
		<category><![CDATA[endShape]]></category>
		<category><![CDATA[fill]]></category>
		<category><![CDATA[funções]]></category>
		<category><![CDATA[informação]]></category>
		<category><![CDATA[line]]></category>
		<category><![CDATA[noFill]]></category>
		<category><![CDATA[noSmooth]]></category>
		<category><![CDATA[noStroke]]></category>
		<category><![CDATA[point]]></category>
		<category><![CDATA[processing]]></category>
		<category><![CDATA[quad]]></category>
		<category><![CDATA[rect]]></category>
		<category><![CDATA[rectMode]]></category>
		<category><![CDATA[size]]></category>
		<category><![CDATA[smooth]]></category>
		<category><![CDATA[stroke]]></category>
		<category><![CDATA[strokeCap]]></category>
		<category><![CDATA[strokeJoin]]></category>
		<category><![CDATA[strokeWeight]]></category>
		<category><![CDATA[triangle]]></category>
		<category><![CDATA[vertex]]></category>

		<guid isPermaLink="false">http://www.brunocampagnolo.com/2009ip/?p=15</guid>
		<description><![CDATA[Introdução à Programação de Computadores usando Processing
Objetivo
Este texto tem como objetivo apresentar a programação de computadores para aqueles que nunca tiveram contato prévio com nenhuma outra linguagem ou ambiente de programação. Inicia-se com uma apresentação dos conceitos básicos sobre linguagens de programação em geral. Posteriormente, alguns destes conceitos são explorados utilizando-se a linguagem e ambiente [...]]]></description>
			<content:encoded><![CDATA[<h1 style="text-align: justify;">Introdução à Programação de Computadores usando Processing</h1>
<h2 style="text-align: justify;">Objetivo</h2>
<p style="text-align: justify;">Este texto tem como objetivo apresentar a programação de computadores para aqueles que nunca tiveram contato prévio com nenhuma outra linguagem ou ambiente de programação. Inicia-se com uma apresentação dos conceitos básicos sobre linguagens de programação em geral. Posteriormente, alguns destes conceitos são explorados utilizando-se a <a href="http://www.processing.org/">linguagem e ambiente de programação Processing</a>. Os exemplos que serão apresentados se baseiam na necessidade de conhecer os fundamentos programação gráfica. Desta forma, também será focado o conhecimento matemático essencial para o trabalho com as primitivas gráficas na tela do computador, como, por exemplo, sistemas de coordenadas, ângulos e formas de desenho básicas.</p>
<p style="text-align: justify;">A leitura deste texto pode ser feita de maneira linear. Preferencialmente, siga também os links fornecidos em cada tópico quando surgir alguma dúvida. Tais links servem para que você se acostume a leitura da documentação do próprio Processing. No fim do documento, a seção &#8220;Para Saber Mais&#8221; faz referência a material complementar ou alternativo ao tópicos discorridos.</p>
<p style="text-align: justify;">&nbsp;</p>
<p><span id="more-15"></span></p>
<h2 style="text-align: justify;">Sintaxe introduzida (link para documentação em português)</h2>
<p>Esta seção serve como resumo e referência aos comandos explorados neste capítulo. <strong>Pule para o tópico &#8220;O Processing&#8221; se for sua primeira leitura!</strong></p>
<ul>
<li>Elementos de código:
<ul>
<li><a href="http://www.dainf.cefetpr.br/~merkle/processing/reference/ptBR/comment.html">//</a> &#8211; Comentário de código;</li>
<li><a href="http://www.dainf.cefetpr.br/~merkle/processing/reference/ptBR/multilinecomment.html">/* */</a> &#8211; Comentário multilinha;</li>
<li><a href="http://www.dainf.cefetpr.br/~merkle/processing/reference/ptBR/doccomment.html">/** */</a> &#8211; Comentário de código;</li>
<li><a href="http://www.processing.org/reference/semicolon.html">;</a> &#8211; Finalizador de instrução;</li>
<li><a href="http://www.dainf.cefetpr.br/~merkle/processing/reference/ptBR/comma.html">,</a> &#8211; Separador de parâmetros;</li>
</ul>
</li>
<li>Operadores:
<ul>
<li><a href="http://www.dainf.cefetpr.br/~merkle/processing/reference/ptBR/greaterthan.html">&gt;</a>: Maior;</li>
<li><a href="http://www.dainf.cefetpr.br/~merkle/processing/reference/ptBR/lessthan.html">&lt;</a>: Menor;</li>
<li><a href="http://www.dainf.cefetpr.br/~merkle/processing/reference/ptBR/equality.html">==</a>: Igual;</li>
</ul>
</li>
<li>Valores lógicos:
<ul>
<li><a href="http://www.dainf.cefetpr.br/~merkle/processing/reference/ptBR/true.html">true</a>: verdadeiro;</li>
<li><a href="http://www.dainf.cefetpr.br/~merkle/processing/reference/ptBR/false.html">false</a>: falso;</li>
</ul>
</li>
<li>Configuração do fundo de tela:
<ul>
<li><a href="http://www.dainf.cefetpr.br/~merkle/processing/reference/ptBR/size_.html">size</a>: Controla o tamanho da janela do programa, recebendo dois parâmetros: largura e altura da janela;</li>
<li><a href="http://www.dainf.cefetpr.br/~merkle/processing/reference/ptBR/background_.html">background</a>: Modifica a cor de preenchimento do fundo da tela;</li>
</ul>
</li>
<li>Cores:
<ul>
<li><a href="http://www.dainf.cefetpr.br/~merkle/processing/reference/ptBR/background_.html">background</a>: Modifica a cor de preenchimento do fundo da tela;</li>
<li><a href="http://www.dainf.cefetpr.br/~merkle/processing/reference/ptBR/fill_.html"><span style="color: #000000;">fill</span></a>: <span style="color: #000000;">Escolhe a cor usada para preenchimento das formas;</span></li>
<li><a href="http://www.dainf.cefetpr.br/~merkle/processing/reference/ptBR/noFill_.html"><span style="color: #000000;">noFill</span></a>: <span style="color: #000000;">Desabilita o preenchimento das formas;</span></li>
<li><a href="http://www.dainf.cefetpr.br/~merkle/processing/reference/ptBR/stroke_.html"><span style="color: #000000;">stroke</span></a>: <span style="color: #000000;">Escolhe a cor usada para o desenho de bordas e linhas;</span></li>
<li><a href="http://www.dainf.cefetpr.br/~merkle/processing/reference/ptBR/noStroke_.html"><span style="color: #000000;">noStroke</span></a>: <span style="color: #000000;">Desabilita o desenho das bordas e linhas.</span></li>
</ul>
</li>
<li>Desenho de formas bidimensionais:
<ul>
<li><a href="http://www.dainf.cefetpr.br/~merkle/processing/reference/ptBR/point_.html">point</a>: Desenha um ponto em uma posição específica;</li>
<li><a href="http://www.dainf.cefetpr.br/~merkle/processing/reference/ptBR/line_.html">line</a>: Desenha uma linha ligando dois pontos;</li>
<li><a href="http://www.dainf.cefetpr.br/~merkle/processing/reference/ptBR/triangle_.html">triangle</a>: Gera um triângulo a partir de 3 pontos;</li>
<li><a href="http://www.dainf.cefetpr.br/~merkle/processing/reference/ptBR/quad_.html">quad</a>: Desenha um quadrilátero a partir de 4 pontos;</li>
<li><a href="http://www.dainf.cefetpr.br/~merkle/processing/reference/ptBR/rect_.html">rect</a>: Desenha um tipo especial de quadrilátero, o retângulo, a partir de um ponto, uma largura e uma altura.</li>
<li><a href="http://www.dainf.cefetpr.br/~merkle/processing/reference/ptBR/ellipse_.html">ellipse</a>: Desenha uma elipse, dado a sua coordenada, a largura e a altura. Para desenhar um círculo a largura e altura devem ser iguais;</li>
<li><a href="http://www.dainf.cefetpr.br/~merkle/processing/reference/ptBR/arc_.html">arc</a>: Cria um arco. Arcos são pedaços de elipse. A função arc recebe como parâmetro além da coordenada, da largura e da altura o início e o fim do arco em radianos.</li>
<li><a href="http://www.dainf.cefetpr.br/~merkle/processing/reference/ptBR/bezier_.html">bezier</a>: Constrói uma curva de Bezier a partir dos pontos âncora e pontos de controle;</li>
<li><a href="http://www.dainf.cefetpr.br/~merkle/processing/reference/ptBR/curve_.html">curve</a>: Desenha uma linha curva;</li>
<li><a href="http://www.dainf.cefetpr.br/~merkle/processing/reference/ptBR/beginShape_.html">beginShape</a>, <a href="http://www.dainf.cefetpr.br/~merkle/processing/reference/ptBR/vertex_.html">vertex </a>e <a href="http://www.dainf.cefetpr.br/~merkle/processing/reference/ptBR/endShape_.html">endShape</a>: Constrói um polígono a partir de um conjunto de vértices.</li>
</ul>
</li>
<li>Alteração nos atributos de desenho:
<ul>
<li><span style="color: #000000;"><a href="http://www.dainf.cefetpr.br/~merkle/processing/reference/ptBR/stroke_.html">stroke</a>: Escolhe a cor usada para o desenho de bordas e linhas;</span></li>
<li><span style="color: #000000;"><a href="http://www.dainf.cefetpr.br/~merkle/processing/reference/ptBR/strokeWeight_.html">strokeWeight</a>: Determina a espessura de desenho das linhas;</span></li>
<li><span style="color: #000000;"><a href="http://www.dainf.cefetpr.br/~merkle/processing/reference/ptBR/strokeCap_.html">strokeCap</a>: Escolhe o estilo de renderização das finalizações de linha;</span></li>
<li><span style="color: #000000;"><a href="http://www.dainf.cefetpr.br/~merkle/processing/reference/ptBR/strokeJoin_.html">strokeJoin</a>: Define o estilo de junção dos segmentos de linha formando um polígono;<br />
</span></li>
<li><span style="color: #000000;"><a href="http://www.dainf.cefetpr.br/~merkle/processing/reference/ptBR/noStroke_.html">noStroke</a>: Desabilita o desenho das bordas e linhas;<br />
</span></li>
<li><span style="color: #000000;"><a href="http://www.dainf.cefetpr.br/~merkle/processing/reference/ptBR/fill_.html">fill</a>: Escolhe a cor usada para preenchimento das formas;<br />
</span></li>
<li><span style="color: #000000;"><a href="http://www.dainf.cefetpr.br/~merkle/processing/reference/ptBR/noFill_.html">noFill</a>: Desabilita o preenchimento das formas;<br />
</span></li>
<li><span style="color: #000000;"><a href="http://www.dainf.cefetpr.br/~merkle/processing/reference/ptBR/smooth_.html">smooth</a>: Desenha os elementos geométricos com bordas e cantos suavizados;<br />
</span></li>
<li><span style="color: #000000;"><a href="http://www.dainf.cefetpr.br/~merkle/processing/reference/ptBR/noSmooth_.html">noSmooth</a>: Desabilita a suavização de bordas e cantos;</span></li>
<li><span style="color: #000000;"><a href="http://www.dainf.cefetpr.br/~merkle/processing/reference/ptBR/rectMode_.html">rectMode</a>: Configura o comportamento padrão de como um retângulo é desenhado.</span></li>
</ul>
</li>
</ul>
<h2 style="text-align: justify;">Sintaxe introduzida (link para documentação em inglês)</h2>
<p>Esta seção serve como resumo e referência aos comandos explorados neste capítulo. <strong>Pule para o tópico &#8220;O Processing&#8221; se for sua primeira leitura!</strong></p>
<ul>
<li>Elementos de código:
<ul>
<li><a href="http://www.processing.org/reference/comment.html">//</a> &#8211; Comentário de código;</li>
<li><a href="http://www.processing.org/reference/multilinecomment.html">/* */</a> &#8211; Comentário multilinha;</li>
<li><a href="http://www.processing.org/reference/doccomment.html">/** */</a> &#8211; Comentário de código;</li>
<li><a href="http://www.processing.org/reference/semicolon.html">;</a> &#8211; Finalizador de instrução;</li>
<li><a href="http://www.processing.org/reference/comma.html">,</a> &#8211; Separador de parâmetros;</li>
</ul>
</li>
<li>Operadores:
<ul>
<li><a href="http://www.processing.org/reference/greaterthan.html">&gt;</a>: Maior;</li>
<li><a href="http://www.processing.org/reference/lessthan.html">&lt;</a>: Menor;</li>
<li><a href="http://www.processing.org/reference/equality.html">==</a>: Igual;</li>
</ul>
</li>
<li>Valores lógicos:
<ul>
<li><a href="http://www.processing.org/reference/true.html">true</a>: verdadeiro;</li>
<li><a href="http://www.processing.org/reference/false.html">false</a>: falso;</li>
</ul>
</li>
<li>Configuração do fundo de tela:
<ul>
<li><a href="http://www.processing.org/reference/size_.html">size</a>: Controla o tamanho da janela do programa, recebendo dois parâmetros: largura e altura da janela;</li>
<li><a href="http://www.processing.org/reference/background_.html">background</a>: Modifica a cor de preenchimento do fundo da tela;</li>
</ul>
</li>
<li>Cores:
<ul>
<li><a href="http://www.processing.org/reference/background_.html">background</a>: Modifica a cor de preenchimento do fundo da tela;</li>
<li><span style="color: #000000;"><a href="http://www.processing.org/reference/fill_.html">fill</a></span>: <span style="color: #000000;">Escolhe a cor usada para preenchimento das formas;</span></li>
<li><span style="color: #000000;"><a href="http://www.processing.org/reference/noFill_.html">noFill</a></span>: <span style="color: #000000;">Desabilita o preenchimento das formas;</span></li>
<li><span style="color: #000000;"><a href="http://www.processing.org/reference/stroke_.html">stroke</a></span>: <span style="color: #000000;">Escolhe a cor usada para o desenho de bordas e linhas;</span></li>
<li><span style="color: #000000;"><a href="http://www.processing.org/reference/noStroke_.html">noStroke</a></span>: <span style="color: #000000;">Desabilita o desenho das bordas e linhas.</span></li>
</ul>
</li>
<li>Desenho de formas bidimensionais:
<ul>
<li><a href="http://www.processing.org/reference/point_.html">point</a>: Desenha um ponto em uma posição específica;</li>
<li><a href="http://www.processing.org/reference/line_.html">line</a>: Desenha uma linha ligando dois pontos;</li>
<li><a href="http://www.processing.org/reference/triangle_.html">triangle</a>: Gera um triângulo a partir de 3 pontos;</li>
<li><a href="http://www.processing.org/reference/quad_.html">quad</a>: Desenha um quadrilátero a partir de 4 pontos;</li>
<li><a href="http://www.processing.org/reference/rect_.html">rect</a>: Desenha um tipo especial de quadrilátero, o retângulo, a partir de um ponto, uma largura e uma altura.</li>
<li><a href="http://www.processing.org/reference/ellipse_.html">ellipse</a>: Desenha uma elipse, dado a sua coordenada, a largura e a altura. Para desenhar um círculo a largura e altura devem ser iguais;</li>
<li><a href="http://www.processing.org/reference/arc_.html">arc</a>: Cria um arco. Arcos são pedaços de elipse. A função arc recebe como parâmetro além da coordenada, da largura e da altura o início e o fim do arco em radianos.</li>
<li><a href="http://www.processing.org/reference/bezier_.html">bezier</a>: Constrói uma curva de Bezier a partir dos pontos âncora e pontos de controle;</li>
<li><a href="http://www.processing.org/reference/curve_.html">curve</a>: Desenha uma linha curva;</li>
<li><a href="http://www.processing.org/reference/beginShape_.html">beginShape</a>, <a href="http://www.processing.org/reference/vertex_.html">vertex </a>e <a href="http://www.processing.org/reference/endShape_.html">endShape</a>: Constrói um polígono a partir de um conjunto de vértices.</li>
</ul>
</li>
<li>Alteração nos atributos de desenho:
<ul>
<li><span style="color: #000000;"><a href="http://www.processing.org/reference/stroke_.html">stroke</a>: Escolhe a cor usada para o desenho de bordas e linhas;</span></li>
<li><span style="color: #000000;"><a href="http://www.processing.org/reference/strokeWeight_.html">strokeWeight</a>: Determina a espessura de desenho das linhas;</span></li>
<li><span style="color: #000000;"><a href="http://www.processing.org/reference/strokeCap_.html">strokeCap</a>: Escolhe o estilo de renderização das finalizações de linha;</span></li>
<li><span style="color: #000000;"><a href="http://www.processing.org/reference/strokeJoin_.html">strokeJoin</a>: Define o estilo de junção dos segmentos de linha formando um polígono;<br />
</span></li>
<li><span style="color: #000000;"><a href="http://www.processing.org/reference/noStroke_.html">noStroke</a>: Desabilita o desenho das bordas e linhas;<br />
</span></li>
<li><span style="color: #000000;"><a href="http://www.processing.org/reference/fill_.html">fill</a>: Escolhe a cor usada para preenchimento das formas;<br />
</span></li>
<li><span style="color: #000000;"><a href="http://www.processing.org/reference/noFill_.html">noFill</a>: Desabilita o preenchimento das formas;<br />
</span></li>
<li><span style="color: #000000;"><a href="http://www.processing.org/reference/smooth_.html">smooth</a>: Desenha os elementos geométricos com bordas e cantos suavizados;<br />
</span></li>
<li><span style="color: #000000;"><a href="http://www.processing.org/reference/noSmooth_.html">noSmooth</a>: Desabilita a suavização de bordas e cantos;</span></li>
<li><span style="color: #000000;"><a href="http://www.processing.org/reference/rectMode_.html">rectMode</a>: Configura o comportamento padrão de como um retângulo é desenhado.</span></li>
</ul>
</li>
</ul>
<h2 style="text-align: justify;">O Processing</h2>
<p style="text-align: justify;"><img class="alignright size-full wp-image-39" style="margin-left: 20px; margin-right: 20px;" title="telaprocessing" src="http://www.brunocampagnolo.com/2009ip/wp-content/uploads/2009/03/telaprocessing.png" alt="telaprocessing" width="420" height="537" />Tal ambiente, derivado da linguagem de programação Java, é uma linguagem de programação e ambiente para pessoas que desejam programar imagens, animações e interações. O Processing pode ser usado para o ensino dos fundamentos da programação de computadores usando um contexto visual. Seu público alvo é formado, principalmente, por artistas, estudantes e pesquisadores. A facilidade de instalação, uso e aprendizagem aliada à produtividade na geração de programas que utilizem interações complexas, faz com que o Processing seja ideal para a prototipação rápida de ideias e como caderno de esboços em software.</p>
<p style="text-align: justify;">Este aspecto didático do Processing não limita a sua aplicação em programas reais que exijam alto desempenho em processamento gráfico e ou que exijam portabilidade para diversas plataformas de software. Por ser baseado na linguagem Java, os programas em Processing geram applets e programas que apresentam excelente performance, principalmente se comparado com outras alternativas&nbsp; como Flash e JavaScript. Além disso, tais programas tem suporte para as plataformas Windows, Linux e Mac OS inclusive para funcionalidades como programação gráfica em 3d, <a href="http://pt.wikipedia.org/wiki/OpenGL">OpenGL</a>, processamento de som e vídeo, geração de arquivos <a href="http://pt.wikipedia.org/wiki/Portable_Document_Format">PDF</a>, exibição de imagens <a href="http://pt.wikipedia.org/wiki/SVG">SVG</a>, e, qualquer biblioteca existente para a linguagem Java.</p>
<p style="text-align: justify;">O Processing será nossa ferramenta de programação de computadores neste curso, veja sua interface ao lado. Sua instalação é bastante leve e simples e deve ser feita a partir do <a href="http://www.processing.org/download/index.html">próprio portal da ferramenta</a>. Para um passo a passo de instalação da ferramenta e como executar o seu primeiro código básico:</p>
<ol>
<li>Baixe o arquivo disponível no <a href="http://www.processing.org/download/index.html">portal do Processing</a>. Escolha a versão conforme o seu sistema operacional:
<ol>
<li><a href="http://www.processing.org/download/processing-1.0.3.zip">Windows</a>;</li>
<li><a href="http://www.processing.org/download/processing-1.0.3.tgz">Linux</a>;</li>
<li><a href="http://www.processing.org/download/processing-1.0.3.dmg">Mac OSX</a>.</li>
</ol>
</li>
<li>Descomprima o arquivo na pasta de sua preferência;</li>
<li>Nesta pasta, execute o programa Processing.exe;</li>
<li>Dentro da ferramenta, digite o código a seguir e clique no botão Run ou use a combinação de teclas CTRL + R;</li>
<li>Parabéns! Este é o seu primeiro programa em Processing! Veja o resultado esperado abaixo.</li>
</ol>
<p><pre name="code" class="java">
size(300, 200);
line(100, 100, 200, 100);
</pre></p>
<p style="text-align: justify;"><img class="alignnone size-full wp-image-74" title="oimundo" src="http://www.brunocampagnolo.com/2009ip/wp-content/uploads/2009/03/oimundo.png" alt="oimundo" width="306" height="232" /></p>
<p style="text-align: justify;"><span style="color: #ff0000;"><span style="color: #000000;">Após a instalação do Processing, vamos entender o que significa a criação de um programa de computador. Destaca-se, porém, que o foco deste capítulo é enxergar o Processing como um ambiente de programação </span><span style="color: #000000;">voltado para a criação de imagens. Ou seja, trabalharemos com o Processing como se ele fosse um programa como o Paint ou PhotoShop. Mas, <strong>programar não significa fazer desenhos</strong>! Nos capítulos seguintes, veremos que o Processing não se limita ao desenho, sendo uma ferramenta completa de desenvolvimento que apresenta uma série de poderosas estruturas de programação. </span></span></p>
<h2 style="text-align: justify;">O que é programação de computadores?</h2>
<p style="text-align: justify;">Programar significa construir algoritmos. Um algoritmo é uma sequência de passos destinada a resolver um problema e é formado, principalmente, por estruturas de controle as quais serão discutidas posteriormente com mais detalhes.<br />
Tais estruturas de controle fazem parte do nosso dia a dia e, resumidamente são:</p>
<ul style="text-align: justify;">
<li><strong>Estrutura sequencial</strong>: indica a ordem de execução de um algoritmo. Cada passo deve ser realizado necessariamente após o outro;</li>
<li><strong>Estrutura de seleção</strong>: permite a escolha de um conjunto de passos em detrimento do outro conforme uma certa condição seja satisfeita;</li>
<li><strong>Estrutura de repetição</strong>: dá o poder de controlar a quantidade de vezes que um conjunto de passos pode ser executado em um algoritmo.</li>
</ul>
<p style="text-align: justify;">Estas estruturas permitem que sejam alteradas as informações no processador do computador. Neste capítulo, será tratado como a estrutura sequencial trabalha com as informações do tipo constante.</p>
<h2 style="text-align: justify;">A informação</h2>
<p style="text-align: justify;">Assim, além destas estruturas, outro ponto importante para a compreensão do que é um algoritmo é o conceito de informação. O material que o algoritmo manipula, ou seja, cada dado, fato ou valor que pode ser trabalhado na memória do computador é uma informação. Existem diversos formatos que uma informação pode ser armazenada e estes formatos são os chamados tipos primitivos de informação. Apesar de cada linguagem de programação ter um conjunto próprio de tipos primitivos, a maior parte das linguagens da família da linguagem Java, como o Processing, trabalha com os seguintes cinco tipos básicos:</p>
<ul style="text-align: justify;">
<li><strong>Inteiro</strong>: número pertencente ao conjunto dos números inteiros, pode ser negativo se acompanhado do sinal &#8220;-&#8221;. Exemplos: 130, -10, 2700, idade em anos, número de páginas de um livro, posição do mouse no eixo x, posição do mouse no eixo y;</li>
<li><strong>Ponto flutuante</strong>: número pertencente ao conjunto dos números de ponto flutuante. É formado por parte inteira e parte decimal, as quais são separadas através do &#8220;.&#8221; Exemplos: 1.73, 12.23, PI, salário.</li>
<li><strong>Caractere</strong>: texto formado por um caractere. Delimitado através do sinal de apóstrofo (&#8221;&#8216;&#8221;). Exemplos: &#8216;a&#8217;, &#8216;b&#8217;, &#8216;Z&#8217;, &#8216;1&#8242;, &#8216;2&#8242;, tecla pressionada.</li>
<li><strong>String</strong>: texto formado por um conjunto de um ou mais caracteres. Deve ser delimitado por um sinal de aspas (&#8221; &#8221; &#8220;). Exemplos: &#8220;Processing&#8221;, &#8220;Bruno&#8221;,&nbsp; &#8220;A&#8221;, seu nome.</li>
<li><strong>Lógico</strong>: o tipo lógico pode assumir dois valores: verdadeiro ou falso. O valor verdadeiro é representado pela palavra <a href="http://www.processing.org/reference/true.html">true </a>e o valor falso por <a href="http://www.processing.org/reference/false.html">false</a>. No Processing, o true também pode ser associado ao valor 1 e o false ao valor 0. Exemplos: true, false, interruptor de luz, estado do botão do mouse (pressionado ou não).</li>
</ul>
<p style="text-align: justify;">Uma informação pode ser constante ou variável. Constantes não variam com o tempo durante a execução de um programa. Variáveis podem ser alteradas em algum instante da execução.</p>
<ul style="text-align: justify;">
<li><strong>Exemplos de constantes</strong>: 123, PI, &#8220;nome&#8221;, true;</li>
<li><strong>Exemplos de variáveis</strong>: nome, interruptor, estado do botão do mouse.</li>
</ul>
<blockquote>
<h3 style="text-align: justify;"><em>Exercício de Fixação 01 &#8211; Classifique como variável ou constante</em></h3>
<p style="text-align: justify;"><em>Classifique os itens abaixo como variáveis ou constantes.</em></p>
<p style="text-align: justify;"><em>a) 12</em></p>
<p style="text-align: justify;"><em>b) endereço</em></p>
<p style="text-align: justify;"><em>c) &#8220;endereço&#8221;</em></p>
<p style="text-align: justify;"><em>d) 2.3</em></p>
<p style="text-align: justify;"><em>e) true</em></p>
<p style="text-align: justify;"><em>f) melhor time do Paraná</em></p>
<p style="text-align: justify;"><em>g) 1 + 1</em></p>
</blockquote>
<blockquote>
<h3 style="text-align: justify;"><em>Exercício de Fixação 02 &#8211; Determine o tipo de constante</em></h3>
<p style="text-align: justify;"><em>Classifique os itens abaixo como: Inteiro, Ponto Flutuante, Caractere, String e Lógico.<br />
</em></p>
<p style="text-align: justify;"><em>a) true</em></p>
<p style="text-align: justify;"><em>b) 23</em></p>
<p style="text-align: justify;"><em>c) 2.56</em></p>
<p style="text-align: justify;"><em>d) &#8216;a&#8217;</em></p>
<p style="text-align: justify;"><em>e) false</em></p>
<p style="text-align: justify;"><em>f) &#8220;true&#8221;</em></p>
<p style="text-align: justify;"><em>g) &#8220;false&#8221;</em></p>
</blockquote>
<p style="text-align: justify;">O uso das informações na memória exige que o programador entenda como representar a informação para o programa. No Processing, a informação é representada no formato texto. A manipulação das informações acontece através da execução de instruções que utilizam as estruturas sequencial, de seleção e de repetição. A seguir, vamos construir nosso primeiro algoritmo, o qual é formado apenas sequenciação de instruções.</p>
<h2 style="text-align: justify;">A estrutura sequencial e um exemplo de algoritmo</h2>
<p style="text-align: justify;">Vamos imaginar o seguinte problema: criar um esboço da bandeira do Brasil colado em uma cartolina branca.&nbsp; Além da cartolina, você tem um conjunto de pedaços de papel de diferentes cores: verde, amarelo e azul. Também tem tesoura, cola e uma régua. Em Português coloquial, uma resolução possível deste problema simples é bastante óbvia:</p>
<ol style="text-align: justify;">
<li>Recortar um retângulo verde;</li>
<li>Colar o retângulo verde na cartolina;</li>
<li>Recortar um losango amarelo;</li>
<li>Colar o losango amarelo;</li>
<li>Recortar um círculo de cor azul;</li>
<li>Cole, por fim, o círculo azul.</li>
</ol>
<p style="text-align: justify;">Seguimos uma sequencia de ações linear na qual cada ação é executada uma linha após a outra, de cima para baixo. <strong>Executando em uma ordem diferente, o resultado pode não ser o esperado. </strong>Colando primeiro o losango amarelo na cartolina, por exemplo, invalidaria a construção da bandeira.</p>
<p style="text-align: justify;">Desta forma, em um algoritmo, cada linha corresponde a uma instrução e deve ser lida e interpretada de maneira independente da anterior como se estivéssemos trabalhando com uma receita culinária. Esta sequencia lógica de execução do algoritmo passo a passo é a estrutura sequencial ou sequenciação. Ou seja, <strong>a ordem do código escrito importa na ordem de execução</strong>.</p>
<p style="text-align: justify;">Embora pareça completa e simples a lista de instruções acima, há algumas questões em aberto. Por exemplo, o retângulo verde é de que tamanho? Ele é maior ou menor que o losango amarelo? O ser humano responde estas questões de maneira intuituiva. Na programação de computadores não há espaço para ambiguidade. Se criássemos um programa para desenhar a bandeira do Brasil, deveríamos definir exatamente quais são as dimensões e posição de qualquer um dos componentes do objeto sendo desenhado. Além disso, não podemos usar a língua portuguesa para especificar comandos para a linguagem. Faz-se necessária a utilização de instruções da linguagem de programação. Para que possamos escrever o algoritmo anterior no Processing será necessário compreender que escrever um programa de computador é muito diferente de escrever um email ou um texto qualquer e a sintaxe deve ser conhecida e respeitada.</p>
<p style="text-align: justify;">Por exemplo, no Processing, o desenho de um retângulo se dá através da<a href="http://www.processing.org/reference/rect_.html"> instrução rect</a>. Uma instrução guarda certa semelhança com uma frase na língua portuguesa. Assim, a frase: &#8220;Desenhar um retângulo de 80 por 50 na posição 120, 130.&#8221;, no Processing deve ser escrito com o código abaixo.</p>
<p style="text-align: justify;"><pre name="code" class="java">
rect(120, 130, 80, 50);
</pre></p>
<p style="text-align: justify;">Constata-se que este código apresenta 4 informações numéricas constantes: 120, 130, 80 e 50. Estas informações numéricas são processadas pela função rect, responsável por construir o retângulo. Isto posto, da mesma forma como uma frase da língua humana, há uma série de componentes no código-fonte acima. Pode-se, até mesmo, fazer a analogia com os sujeitos, predicados e objetos de uma oração. Na próxima seção analisaremos a anatomia de uma instrução e de um código simples.</p>
<h2 style="text-align: justify;">Anatomia de um código em Processing</h2>
<p style="text-align: justify;">Aprender uma linguagem de programação é como aprender um novo idioma. Antes da fluência na linguagem, devemos, portanto, conhecer sua sintaxe. Diferente de um idioma, no qual o ser humano interpreta e perdoa os erros do iniciante, em uma linguagem de programação o erro de sintaxe implica em um programa que não funciona. Um programa básico no Processing é formado pelos seguintes componentes: comentários, funções, instruções, expressões e espaços em branco.</p>
<h3 style="text-align: justify;">Comentários</h3>
<p style="text-align: justify;">Comentários são fragmentos do código que o computador ignora. Sua importância está em escrever recados no programa sobre o que ele faz e comentários em geral sobre o funcionamento de um conjunto de instruções. Bons programadores comentam seu código de maneira que não apenas eles mas também outras pessoas possam entender o que acontece. Outra utilidade do comentário é ocultar pedaços do código que estão incompletos ou com algum problema e que devem ser consertados em outro momento.</p>
<p style="text-align: justify;">No exemplo abaixo, todas as linhas marcadas com <a href="http://www.processing.org/reference/comment.html">// são comentários de código</a>.</p>
<p><pre name="code" class="java">
// A função size configura a largura e a altura da tela do programa.
// No exemplo abaixo, a tela possui 300 pixels de altura e 200 de largura.
size(300, 200);
// A função background altera a cor de fundo da tela.
// No exemplo abaixo, a tela é pintada na cor branca.
background(255);
// A linha abaixo, embora seja um comando válido, não será executada pois o sinal de comentário está colocado antes do comando
// rect(120, 130, 80, 50);
</pre></p>
<p style="text-align: justify;">Outra maneira de criar um comentário é utilizando o conjunto <a href="http://www.processing.org/reference/multilinecomment.html">/* e */</a>. Este é o chamado comentário multilinha. Neste caso, o comentário inicia-se com o sinal /* e pode ser estendido a diversas linhas. O comentário é fechado com o sinal */.</p>
<p><pre name="code" class="java">
/* O programa abaixo é um exemplo simples de como podemos desenhar uma linha no Processing.
Atenção: este programa se preocupa em colorir a linha com a cor vermelha usando a função stroke.
*/
size(300, 200);
background(255);
stroke(255, 0, 0);
line(0, 0, 100, 100);
/* as linhas seguintes estão comentadas, ou seja, não são executadas
stroke(255, 0, 0);
line(100, 100, 200, 200);
*/
</pre></p>
<p style="text-align: justify;">O comentário de código (<em>doc comment</em>), por sua vez, é útil para a geração de uma documentação explicativa sobre o programa como um todo. Esta documentação é inserida no documento HTML gerado quando é feita a exportação do código em Processing para o formato applet, o qual permite sua publicação na Web. Após a exportação, todo o texto colocado entre os sinais <a href="http://www.processing.org/reference/doccomment.html">/** e */ </a>é colocado no arquivo &#8220;index.html&#8221;. Para exportar um programa em Processing, use o menu File &gt; Export ou tecle CTRL + E.</p>
<p><pre name="code" class="java">
/**
Exemplo simples de como podemos desenhar uma linha vermelha no Processing.
Atenção: este programa se preocupa em colorir a linha com a cor vermelha usando a função stroke.
*/
size(300, 200);
background(255);
stroke(255, 0, 0);
line(0, 0, 100, 100);
/* As linhas seguintes estão comentadas, ou seja, não são executadas
Estas linhas não serão copiadas no arquivo index.html.
stroke(255, 0, 0);
line(100, 100, 200, 200);
*/
</pre></p>
<p style="text-align: justify;">Observa-se que no Processing o comentário é exibido com uma cor diferente em relação ao resto do código.</p>
<h3 style="text-align: justify;">Funções</h3>
<p>Funções (também chamados de módulos ou procedimentos) permitem a transmissão de ordens do programador para o computador. Servem como comandos sendo passados para desenhar, alterar cores, realizar cálculos, executar ações quaisquer, etc. O nome de uma função é geralmente em letra minúscula. Quando uma função é chamada, seu nome deve ser seguido por parênteses. Quando o nome da função é composto por duas palavras, a segunda palavra é conectada na primeira e sua primeira letra é colocada em maiúsculo. Esta não é uma regra obrigatória, mas é uma boa prática para ser seguida quando você cria suas próprias funções. Portanto, além dos procedimentos disponíveis por padrão no Processing é possível definir novas funções para compartimentalizar e organizar o seu código.</p>
<p>No código abaixo, temos exemplos de chamadas às funções <a href="http://www.processing.org/reference/line_.html">line</a>,&nbsp; <a href="http://www.processing.org/reference/fill_.html">fill</a>, <a href="http://www.processing.org/reference/noFill_.html">noFill </a>e <a href="http://www.processing.org/reference/rect_.html">rect</a>.</p>
<p><pre name="code" class="java">
// A função size (300, 200) configura a tela para 300 pixels de largura por 200 pixels de altura
size(300, 200);
// A função fill habilita o preenchimento das formas sendo desenhadas a seguir.
// A cor escolhida é uma tonalidade intermediária de cinza
fill(128);
// A função rect desenha uma retângulo de 50 pixels por 30 pixels a partir do ponto (0, 0 )
rect(0, 0, 50, 30);
// A função noFill desabilita o preenchimento das formas.
noFill();
// A função rect desenha um retângulo de 50 pixels por 30 pixels a partir do ponto (10, 10)
// Observe que o retângulo não está preenchido devido à chamada a noFill feita anteriormente.
rect(10, 10, 50, 30);
</pre></p>
<p>Funções podem receber parâmetros para alterar ou configurar seu comportamente. Algumas funções, como a noFill, não recebem parâmetros. Outras, como a fill, recebem um parâmetro apenas. As demais funções como a rect podem utilizar mais de um parâmetro e estes parâmetros são separados através de <a href="http://www.processing.org/reference/comma.html">vírgulas</a>.</p>
<blockquote>
<h3 style="text-align: justify;"><em>Exercício de Fixação 03 &#8211; Determine o número de parâmetros</em></h3>
<p><em>Determine o número de parâmetros de cada uma das chamadas à funções abaixo.</em></p>
<p><em>a) noStroke();</em></p>
<p><em>b) fill(128);</em></p>
<p><em>c) rect(12, 12, 12, 12);</em></p>
<p><em>d) quad(10, 20, 20, 30, 30, 50, 60, 10);</em></p></blockquote>
<p>Importante acrescentar que as funções em Processing são sensíveis ao contexto. Deste modo, as chamadas às funções devem se preocupar com a letras maiúsculas e minúsculas. Por exemplo, a função rect não pode ser chamada escrevendo Rect e nem RECT. Assim, o código abaixo está errado e gera o erro &#8220;The function Size(int, int) does not exist.&#8221;</p>
<p><img class="alignnone size-full wp-image-76" title="erronome" src="http://www.brunocampagnolo.com/2009ip/wp-content/uploads/2009/03/erronome.png" alt="erronome" width="276" height="436" /></p>
<p><pre name="code" class="java">
Size(100, 100);
</pre></p>
<h3 style="text-align: justify;">Expressões</h3>
<p>Através da combinação de operadores consegue-se a geração de expressões. Existem expressões de diversos tipos: expressões aritméticas, expressões lógicas e expressões relacionais.&nbsp; Expressões sempre tem como resultado um valor. Exemplos de expressões:</p>
<ul>
<li> 5+6 corresponde ao valor 11;</li>
<li>120.23 &#8211; 0.23 corresponde ao valor 120;</li>
<li>&#8220;Bruno &#8221; + &#8221; Campagnolo&#8221; corresponde ao valor &#8220;Bruno Campagnolo&#8221;;</li>
<li>((3*5)+4) corresponde ao valor 19;</li>
<li><a href="http://www.processing.org/reference/greaterthan.html">5 &gt; 3</a> corresponde ao valor true, pois 5 é maior que 3;</li>
<li><a href="http://www.processing.org/reference/equality.html">52 == 52</a> corresponde ao valor true, pois 52 é igual a 52;</li>
<li><a href="http://www.processing.org/reference/lessthan.html">51 &lt; 41</a> corresponde ao valor false, pois 51 não é menor que 41.</li>
</ul>
<p>As expressões podem ser usadas diretamente como parâmetro de uma função:</p>
<pre>// A função rect chamada abaixo desenha um retângulo de 50 pixels por 30 pixels a partir do ponto (20, 30).
// Observe que 10+10 corresponde a 20 e 3 * 10 dá o resultado da multiplicação de 3 por 10.
rect(10+10, 3*10, 50, 30);</pre>
<blockquote>
<h3 style="text-align: justify;"><em><em>Exercício de Fixação 04 &#8211; Determine o valor da expressão<br />
</em></em></h3>
<p><em>Determine qual é o valor de cada uma das expressões abaixo.</em></p>
<p><em>a) 1+1</em></p>
<p><em>b) 2 * 4</em></p>
<p><em>c) 20 * 4 + 2</em></p>
<p><em>d) 20 * (4 + 2)</em></p>
<p><em>e) 5 &gt; 40</em></p>
<p><em>f) 45 &lt; 50</em></p>
<p><em>g) (2*3) &gt; (5*1)</em></p>
<p><em>h) (10-10)==(20-20)</em></p></blockquote>
<h3 style="text-align: justify;">Instruções</h3>
<p>Assim, um conjunto de expressões e funções define uma instrução, a qual deve ser sempre finalizada pelo <a href="http://www.processing.org/reference/semicolon.html">sinal &#8220;;&#8221;</a>. Muito cuidado deve ser dedicado à utilização deste sinal, pois quando você esquece de colocar um ponto e vírgula em um programa, o Processing reclama com o erro &#8220;Syntax error, maybe a missing semicolon?&#8221;, <span style="color: #ff0000;"><span style="color: #000000;">como mostra a figura.</span><br />
</span></p>
<p><span style="color: #ff0000;"><img class="alignnone size-full wp-image-77" title="erropontoevirgula" src="http://www.brunocampagnolo.com/2009ip/wp-content/uploads/2009/03/erropontoevirgula.png" alt="erropontoevirgula" width="276" height="436" /><br />
</span></p>
<p>Existem diferentes tipos de instrução. Por enquanto, conhecemos apenas as instruções úteis para a chamada de funções.</p>
<h3 style="text-align: justify;">Espaços em branco</h3>
<p>O programador não precisa se preocupar com a quantidade de espaços em branco que usa entre os elementos de seu programa. Por espaços em branco leia-se: quebras de linha, tabulações e espaços normais. Deve-se preferir, porém, a representação de cada instrução em apenas uma linha e reservar os espaços&nbsp; para situações onde algum esclarecimento é necessário.</p>
<p>Assim, códigos no estilo abaixo são válidos mas devem ser evitados:</p>
<pre>size</pre>
<pre>(300&nbsp;&nbsp;&nbsp;&nbsp; ,</pre>
<pre>200&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; );</pre>
<pre>background(&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 200)</pre>
<pre>;</pre>
<p>A figura abaixo resume os elementos apresentados.</p>
<p><span style="color: #ff0000;"><img class="alignnone size-full wp-image-80" title="anatomia" src="http://www.brunocampagnolo.com/2009ip/wp-content/uploads/2009/03/anatomia.png" alt="anatomia" width="556" height="491" /><br />
</span></p>
<p style="text-align: justify;">Definidos estes elementos, ferramentas iniciais para que se possa compreender as instruções do Processing, é possível agora utilizar essas instruções para a criação de janelas e desenho de diversas formas geométricas na tela do computador.</p>
<h2 style="text-align: justify;">Sistema de Coordenadas Cartesianas</h2>
<p style="text-align: justify;"><span style="color: #000000;">Quando se faz um desenho na tela do computador é necessária, primeiramente, a especificação do tamanho da área útil de desenho. Esta área é formada por pequenos pontos de luz chamados pixels. </span></p>
<p style="text-align: justify;">Cada pixel é identificado por uma cor e por uma posição. Em relação a posição de um ponto, utiliza-se um sistema de coordenadas cartesianas semelhante ao da matemática. Ou seja,&nbsp; uma primitiva é caracterizada por um valor de posicionamento no eixo x e outro no eixo y. No Processing, a origem dos eixos está na lateral superior esquerda da tela. Assim, o eixo x tem seus valores crescendo da esquerda para a direita e o eixo y inicia-se em cima e cresce até a parte de baixo da tela. A notação de um ponto se dá através do valor de x, seguido pelo valor de y e separados por uma vírgula.</p>
<p style="text-align: justify;"><span style="color: #ff0000;"><img class="alignnone size-full wp-image-82" title="eixocartesiano" src="http://www.brunocampagnolo.com/2009ip/wp-content/uploads/2009/03/eixocartesiano.png" alt="eixocartesiano - Originalmente de REAS e FRY" width="643" height="280" /><br />
</span></p>
<p style="text-align: justify;">Exemplos :</p>
<ul>
<li>(0, 0): Origem padrão do eixo, ponto superior esquerdo;</li>
<li>(99,0): Pixel na superior direita;</li>
<li>(0, 99): Pixel na inferior esquerda;</li>
<li>(99, 99): Pixel na inferior direita.</li>
</ul>
<p style="text-align: justify;">É possível alterar a origem do eixo utilizando-se a <a href="http://www.processing.org/reference/translate_.html">função translate</a>. Tal função especifica uma quantidade de deslocamento que deve ser aplicado nos objetos sendo mostrados na tela. Mais detalhes sobre essa função serão tratados em capítulo posterior.</p>
<h2 style="text-align: justify;">Fundo da Tela (background)</h2>
<p style="text-align: justify;">Assim, quando se fala em uma tela com resolução 800&#215;600, isso significa que a tela contém uma matriz de 800 pixels de largura por 600 pixels de altura. Isso significa 480 mil pontos de luz na tela. Embora este valor possa parecer elevado, o olho humano é bastante exigente e outro fator que influencia na qualidade de uma imagem é o número de pontos que estão contidos em uma unidade de área. Uma unidade comumente utilizada é o pontos por polegada quadrada (<em>dots per inch &#8211; dpi</em>). Bons monitores tem resoluções de 100 dpi. Este valor nem chega perto da resolução de algumas impressoras modernas.</p>
<p style="text-align: justify;">Os programas em Processing, portanto, além de configurarem o tamanho do conjunto de pixels que será utilizado como área de desenho devem também se preocupar com a melhor maneira de preencher estes pixels para melhorar a visualização do ser humano em relação à baixa resolução da tela do computador. Um zoom na tela do computador mostra esse problema em detalhe.</p>
<p style="text-align: justify;"><span style="color: #ff0000;"><img class="alignnone size-full wp-image-83" title="zoom" src="http://www.brunocampagnolo.com/2009ip/wp-content/uploads/2009/03/zoom.png" alt="zoom" width="253" height="302" /><br />
</span></p>
<p style="text-align: justify;">A <a href="http://www.processing.org/reference/size_.html">função size</a> controla o tamanho da janela do programa, recebendo dois parâmetros: largura e altura da janela.</p>
<blockquote>
<p style="text-align: justify;"><span style="color: #ff0000;"><span style="color: #000000;"><img class="alignnone size-full wp-image-84" title="size100100" src="http://www.brunocampagnolo.com/2009ip/wp-content/uploads/2009/03/size100100.png" alt="size100100" width="134" height="160" /></span></span></p>
<p style="text-align: justify;"><span style="color: #ff0000;"><span style="color: #000000;">size(100, 100);</span></span></p>
</blockquote>
<blockquote>
<p style="text-align: justify;"><span style="color: #ff0000;"><span style="color: #000000;"><img class="alignnone size-full wp-image-85" title="size200200" src="http://www.brunocampagnolo.com/2009ip/wp-content/uploads/2009/03/size200200.png" alt="size200200" width="206" height="232" /></span></span></p>
<p style="text-align: justify;"><span style="color: #ff0000;"><span style="color: #000000;">size(200, 200);</span></span></p>
</blockquote>
<blockquote>
<p style="text-align: justify;"><span style="color: #ff0000;"><span style="color: #000000;"><img class="alignnone size-full wp-image-86" title="size320240" src="http://www.brunocampagnolo.com/2009ip/wp-content/uploads/2009/03/size320240.png" alt="size320240" width="326" height="272" /></span></span></p>
<p style="text-align: justify;"><span style="color: #ff0000;"><span style="color: #000000;">size(320, 240);<br />
</span></span></p></blockquote>
<h2 style="text-align: justify;">Cores</h2>
<p style="text-align: justify;">A cor de fundo desta janela por padrão é cinza claro. Para alterar esse valor, a <a href="http://www.processing.org/reference/background_.html">função background</a> é usada para modificar a cor de desenho do fundo da tela. Esta função pode receber um ou mais parâmetros. Não é escopo deste capítulo os diferentes sistemas de representação de cores na tela do computador configurados por estes parâmetros. Futuramente, trataremos destes sistemas, mas, por enquanto, através do menu Tools &gt; Color Selector é possível obter o código de cor referente a uma cor. Se, simplesmente um número entre 0 e 255 for fornecido, a cor de fundo será configurada entre o preto (valor 0) e o branco, com tons intermediários de cinza entre estes dois valores. O valor cinza claro, por exemplo, corresponde ao valor 204.</p>
<p style="text-align: justify;"><span style="color: #ff0000;"><img class="alignnone size-full wp-image-87" title="colorselector" src="http://www.brunocampagnolo.com/2009ip/wp-content/uploads/2009/03/colorselector.png" alt="colorselector" width="415" height="318" /><br />
</span></p>
<p style="text-align: justify;">Duas outras funções para lidar com as cores são a <a href="http://www.processing.org/reference/stroke_.html">função stroke</a> e a <a href="http://www.processing.org/reference/fill_.html">função fill</a>, respectivamente, permitindo alteração da cor das linhas e bordas e a cor de preenchimento das formas básicas. Outras duas funções auxiliares a estas são a <a href="http://www.processing.org/reference/noStroke_.html">função noStroke</a> e a <a href="http://www.processing.org/reference/noFill_.html">função noFill</a>, as quais desabilitam as linhas e bordas e o preenchimento das formas. Na próxima seção trataremos destas formas, mostrando o que acontece quando se combina a chamada destas quatro funções.</p>
<p style="text-align: justify;"><span style="color: #ff0000;"><img class="alignnone size-full wp-image-88" title="strokefill" src="http://www.brunocampagnolo.com/2009ip/wp-content/uploads/2009/03/strokefill.png" alt="strokefill" width="205" height="98" /><br />
</span></p>
<h2 style="text-align: justify;">Formas Primitivas</h2>
<p>O Processing disponibiliza ao programador uma série de funções para desenho das formas bidimensionais primitivas. As principais:</p>
<ul>
<li><a href="http://www.processing.org/reference/point_.html">point</a>: Desenha um ponto em uma posição específica;</li>
<li><a href="http://www.processing.org/reference/line_.html">line</a>: Desenha uma linha ligando dois pontos;</li>
<li><a href="http://www.processing.org/reference/triangle_.html">triangle</a>: Gera um triângulo a partir de 3 pontos;</li>
<li><a href="http://www.processing.org/reference/quad_.html">quad</a>: Desenha um quadrilátero a partir de 4 pontos;</li>
<li><a href="http://www.processing.org/reference/rect_.html">rect</a>: Desenha um tipo especial de quadrilátero, o retângulo, a partir de um ponto, uma largura e uma altura.</li>
<li><a href="http://www.processing.org/reference/ellipse_.html">ellipse</a>: Desenha uma elipse, dado a sua coordenada, a largura e a altura. Para desenhar um círculo a largura e altura devem ser iguais;</li>
<li><a href="http://www.processing.org/reference/arc_.html">arc</a>: Cria um arco. Arcos são pedaços de elipse. A função arc recebe como parâmetro além da coordenada, da largura e da altura o início e o fim do arco em radianos.</li>
<li><a href="http://www.processing.org/reference/bezier_.html">bezier</a>: Constrói uma curva de Bezier a partir dos pontos âncora e pontos de controle;</li>
<li><a href="http://www.processing.org/reference/curve_.html">curve</a>: Desenha uma linha curva;</li>
<li><a href="http://www.processing.org/reference/beginShape_.html">beginShape</a>, <a href="http://www.processing.org/reference/vertex_.html">vertex </a>e <a href="http://www.processing.org/reference/endShape_.html">endShape</a>: Constrói um polígono a partir de um conjunto de vértices.</li>
</ul>
<p>No capítulo atual, trataremos apenas de algumas funções que trabalham com linhas retas. A figura abaixo resume os parâmetros necessários para construir cada uma das formas.</p>
<div id="attachment_89" class="wp-caption alignnone" style="width: 554px"><img class="size-full wp-image-89" title="primitivas" src="http://www.brunocampagnolo.com/2009ip/wp-content/uploads/2009/03/primitivas.png" alt="Retirada de Reas/Fry" width="544" height="845" /><p class="wp-caption-text">Retirada de Reas/Fry</p></div>
<p style="text-align: justify;"><span style="color: #000000;">A construção destas formas também podem ser influenciadas pelas funções de alteração nos atributos de desenho:</span></p>
<ul>
<li><span style="color: #000000;"><a href="http://www.processing.org/reference/stroke_.html">stroke</a>: Escolhe a cor usada para o desenho de bordas e linhas;</span></li>
<li><span style="color: #000000;"><a href="http://www.processing.org/reference/strokeWeight_.html">strokeWeight</a>: Determina a largura de desenho das linhas;</span></li>
<li><span style="color: #000000;"><a href="http://www.processing.org/reference/strokeCap_.html">strokeCap</a>: Escolhe o estilo de renderização das finalizações de linha;</span></li>
<li><span style="color: #000000;"><a href="http://www.processing.org/reference/strokeJoin_.html">strokeJoin</a>: Define o estilo de junção dos segmentos de linha formando um polígono;<br />
</span></li>
<li><span style="color: #000000;"><a href="http://www.processing.org/reference/noStroke_.html">noStroke</a>: Desabilita o desenho das bordas e linhas;<br />
</span></li>
<li><span style="color: #000000;"><a href="http://www.processing.org/reference/fill_.html">fill</a>: Escolhe a cor usada para preenchimento das formas;<br />
</span></li>
<li><span style="color: #000000;"><a href="http://www.processing.org/reference/noFill_.html">noFill</a>: Desabilita o preenchimento das formas;<br />
</span></li>
<li><span style="color: #000000;"><a href="http://www.processing.org/reference/smooth_.html">smooth</a>: Desenha os elementos geométricos com bordas e cantos suavizados;<br />
</span></li>
<li><span style="color: #000000;"><a href="http://www.processing.org/reference/noSmooth_.html">noSmooth</a>: Desabilita a suavização de bordas e cantos;</span></li>
<li><span style="color: #000000;"><a href="http://www.processing.org/reference/rectMode_.html">rectMode</a>: Configura o comportamento padrão de como um retângulo é desenhado.<br />
</span></li>
</ul>
<h3 style="text-align: justify;">Ponto</h3>
<p>Elemento visual mais simples. Caracterizado, no mínimo, por um pixel. A<a href="http://www.processing.org/reference/point_.html"> função point</a> recebe como parâmetro a posição em x e a posição em y do ponto sendo construído. Exemplo de chamada:<br />
<pre name="code" class="java">
point(x, y);
</pre></p>
<blockquote><p><img class="size-full wp-image-49 alignnone" title="pointexemplo1" src="http://www.brunocampagnolo.com/2009ip/wp-content/uploads/2009/03/pointexemplo1.png" alt="pointexemplo1" width="111" height="108" /></p>
<p><pre name="code" class="java">
// Pontos com o mesmo x e y formam uma linha diagonal
//  a partir da superior esquerda.
point(5, 5);
point(10, 10);
point(15, 15);
point(20, 20);
point(25, 25);
point(30, 30);
</pre></p></blockquote>
<blockquote><p><img class="alignnone size-full wp-image-51" title="pointexemplo2" src="http://www.brunocampagnolo.com/2009ip/wp-content/uploads/2009/03/pointexemplo2.png" alt="pointexemplo2" width="111" height="108" /></p>
<p><pre name="code" class="java">
// Pontos com o mesmo valor de y formam uma linha horizontal
point(10, 50);
point(20, 50);
point(30, 50);
point(40, 50);
point(50, 50);
point(60, 50);
point(70, 50);
point(80, 50);
point(90, 50);
</pre></p></blockquote>
<blockquote><p><img class="alignnone size-full wp-image-52" title="pointexemplo3" src="http://www.brunocampagnolo.com/2009ip/wp-content/uploads/2009/03/pointexemplo3.png" alt="pointexemplo3" width="111" height="108" /></p>
<p><pre name="code" class="java">
// Linhas são geradas a partir do agrupamento de pontos
//  Linha diagonal
point(30, 30);
point(31, 31);
point(32, 32);
point(33, 33);
point(34, 34);
point(35, 35);
//  Linha horizontal
point(40, 40);
point(41, 40);
point(42, 40);
point(43, 40);
point(44, 40);
// Linha vertical
point(60, 60);
point(60, 61);
point(60, 62);
point(60, 63);
point(60, 64);
</pre></p></blockquote>
<p><span style="color: #000000;">A cor do ponto pode ser alterada</span> através da <a href="http://www.processing.org/reference/stroke_.html">função stroke</a>. Tal função recebe como parâmetro a cor a ser utilizada.</p>
<blockquote><p><img class="alignnone size-full wp-image-53" title="pointexemplo4" src="http://www.brunocampagnolo.com/2009ip/wp-content/uploads/2009/03/pointexemplo4.png" alt="pointexemplo4" width="112" height="108" /></p>
<p><pre name="code" class="java">
// Linhas são geradas a partir do agrupamento de pontos
//  Linha diagonal com a cor branca
stroke(255);
point(30, 30);
point(31, 31);
point(32, 32);
point(33, 33);
point(34, 34);
point(35, 35);
//  Linha horizontal com a cor preta
stroke(0);
point(40, 40);
point(41, 40);
point(42, 40);
point(43, 40);
point(44, 40);
// Linha vertical com a cor cinza
stroke(128);
point(60, 60);
point(60, 61);
point(60, 62);
point(60, 63);
point(60, 64);
</pre></p></blockquote>
<p><span style="color: #ff0000;"><span style="color: #000000;">A largura do ponto é um atributo configurável com a <a href="http://www.processing.org/reference/strokeWeight_.html">função strokeWeight</a>. O ponto, a partir de um pixel, pode ser colocado com qualquer tamanho na tela.</span></span></p>
<blockquote><p><img class="alignnone size-full wp-image-54" title="pointexemplo5" src="http://www.brunocampagnolo.com/2009ip/wp-content/uploads/2009/03/pointexemplo5.png" alt="pointexemplo5" width="106" height="108" /></p>
<p><pre name="code" class="java">
stroke(0);
point(10, 30);
strokeWeight(2);
stroke(50);
point(15, 30);
strokeWeight(10);
stroke(100);
point(25, 30);
strokeWeight(30);
stroke(150);
point(60, 30);
stroke(160);
strokeWeight(40);
point(50, 75);
</pre></p></blockquote>
<p>Quando o ponto é desenhado com uma largura maior que 1 pixel, a suavização do desenho pode ser desejável. Este processo, chamado antialiasing elimina o serrilhamento no desenho de um ponto de maior largura. O antialiasing é ligado/desligado através das <a href="http://www.processing.org/reference/smooth_.html">funções smooth</a> e <a href="http://www.processing.org/reference/noSmooth_.html">noSmooth</a>.</p>
<blockquote><p><img class="alignnone size-full wp-image-55" title="pointexemplo6" src="http://www.brunocampagnolo.com/2009ip/wp-content/uploads/2009/03/pointexemplo6.png" alt="pointexemplo6" width="110" height="113" /></p>
<p><pre name="code" class="java">
stroke(128);
strokeWeight(50);
smooth();
point(25, 25);
noSmooth();
point(75, 75);
</pre></p></blockquote>
<h3 style="text-align: justify;">Linha</h3>
<p style="text-align: justify;">A partir de dois pontos (origem e destino), uma linha é gerada através do desenho de um conjunto de pontos que unem a origem e o destino. A<a href="http://www.processing.org/reference/line_.html"> função line</a> recebe como parâmetros, nesta ordem:</p>
<ul>
<li><strong>x1</strong>: coordenada em x da origem;</li>
<li><strong>y1</strong>: coordenada em y da origem;</li>
<li><strong>x2</strong>: coordenada em x do destino;</li>
<li><strong>y2</strong>: coordenada em y do destino.</li>
</ul>
<p style="text-align: justify;">Exemplo de chamada:</p>
<p><pre name="code" class="java">
line(x1, y1, x2, y2);
</pre></p>
<blockquote><p><img class="alignnone size-full wp-image-57" title="lineexemplo1" src="http://www.brunocampagnolo.com/2009ip/wp-content/uploads/2009/03/lineexemplo1.png" alt="lineexemplo1" width="106" height="108" /></p>
<p><pre name="code" class="java">
// Linhas horizontais (y de igual valor na origem e no destino)
line(10, 20, 40, 20);
line(15, 30, 35, 30);
line(20, 40, 30, 40);
// Quando a origem e o destino são os mesmos, temos um ponto
line(25, 50, 25, 50);
</pre></p></blockquote>
<blockquote><p><img class="alignnone size-full wp-image-58" title="lineexemplo2" src="http://www.brunocampagnolo.com/2009ip/wp-content/uploads/2009/03/lineexemplo2.png" alt="lineexemplo2" width="108" height="109" /></p>
<p><pre name="code" class="java">
// Linhas verticais são geradas quando o x é igual na origem e no destino
line(20, 10, 20, 40);
line(30, 15, 30, 35);
line(40, 20, 40, 30);
</pre></p></blockquote>
<blockquote><p><img class="alignnone size-full wp-image-59" title="lineexemplo3" src="http://www.brunocampagnolo.com/2009ip/wp-content/uploads/2009/03/lineexemplo3.png" alt="lineexemplo3" width="108" height="110" /></p>
<p><pre name="code" class="java">
// Linhas que compartilham o mesmo ponto estão conectadas
line(30, 40, 30, 60);
line(30, 60, 40, 60);
line(40, 60, 40, 30);
</pre></p></blockquote>
<p style="text-align: justify;"><span style="color: #ff0000;"><span style="color: #000000;">A cor da linha é alterada através da <a href="http://www.processing.org/reference/stroke_.html">função stroke</a>. E a <a href="http://www.processing.org/reference/noStroke_.html">função noStroke</a> oculta qualquer linha desenhada.</span></span></p>
<blockquote><p><img class="alignnone size-full wp-image-102" title="lineexemplo8" src="http://www.brunocampagnolo.com/2009ip/wp-content/uploads/2009/03/lineexemplo8.png" alt="lineexemplo8" width="110" height="105" /></p>
<p><pre name="code" class="java">
// Linhas que compartilham o mesmo ponto estão conectadas
stroke(0);
line(30, 10, 30, 80);
stroke(255);
line(30, 80, 90, 80);
// A linha a seguir não é mostrada
noStroke();
line(90, 80, 40, 80);
</pre></p></blockquote>
<p style="text-align: justify;"><span style="color: #ff0000;"><span style="color: #000000;">Por padrão, a largura de uma linha é de 1 pixel. <span style="color: #000000;">A <a href="http://www.processing.org/reference/strokeWeight_.html">função strokeWeight</a> também pode ser utilizada no desenho de linhas para escolher seu peso.</span></span></span></p>
<p style="text-align: justify;"><span style="color: #ff0000;"><span style="color: #000000;"><span style="color: #000000;"><br />
</span></span></span></p>
<blockquote><p><img class="alignnone size-full wp-image-60" title="lineexemplo5" src="http://www.brunocampagnolo.com/2009ip/wp-content/uploads/2009/03/lineexemplo5.png" alt="lineexemplo5" width="109" height="110" /></p>
<p><pre name="code" class="java">
// Linhas que compartilham o mesmo ponto estão conectadas
// Linha fina
stroke(0);
strokeWeight(3);
line(30, 10, 30, 80);

stroke(255);
strokeWeight(10);
line(30, 80, 90, 80);

// Linha grossa
stroke(128);
strokeWeight(20);
line(90, 80, 90, 40);
</pre></p></blockquote>
<p style="text-align: justify;"><span style="color: #ff0000;"><span style="color: #000000;"><span style="color: #000000;"><span style="color: #ff0000;"><span style="color: #000000;">A finalização de uma linha pode ser de diferentes estilos. Estes estilos são escolhidos através da <a href="http://www.processing.org/reference/strokeCap_.html">função strokeCap</a>. Por padrão, o estilo de renderização é o estilo ROUND, ou seja, uma linha termina com as bordas arredondadas. </span></span></span></span></span></p>
<blockquote><p><img class="alignnone size-full wp-image-62" title="lineexemplo6" src="http://www.brunocampagnolo.com/2009ip/wp-content/uploads/2009/03/lineexemplo6.png" alt="lineexemplo6" width="109" height="110" /></p>
<p><pre name="code" class="java">
strokeWeight(15);
line(10, 20, 90, 20);
strokeCap(SQUARE);
line(10, 40, 90, 40);
strokeCap(PROJECT);
line(10, 60, 90, 60);
strokeCap(ROUND);
line(10, 80, 90, 80);
</pre></p></blockquote>
<p style="text-align: justify;"><span style="color: #ff0000;"><span style="color: #000000;"><span style="color: #000000;"><span style="color: #ff0000;"><span style="color: #000000;">E, para eliminar o serrilhamento o par <a href="http://www.processing.org/reference/smooth_.html">smooth </a>/ <a href="http://www.processing.org/reference/noSmooth_.html">noSmooth </a>continua valendo.</span></span></span></span></span></p>
<blockquote><p><img class="alignnone size-full wp-image-63" title="lineexemplo7" src="http://www.brunocampagnolo.com/2009ip/wp-content/uploads/2009/03/lineexemplo7.png" alt="lineexemplo7" width="109" height="110" /></p>
<p><pre name="code" class="java">
strokeWeight(25);
smooth();
line(20, 25, 80, 25);
noSmooth();
line(20, 75, 80, 75);
</pre></p></blockquote>
<h3 style="text-align: justify;">Triângulo</h3>
<p style="text-align: justify;">A <a href="http://www.processing.org/reference/triangle_.html">função triangle</a> desenha um triângulo a partir de 3 pontos. Um triângulo pode ser construído a partir de 6 parâmetros que representam os pontos a serem conectados:</p>
<ul>
<li><strong>x1</strong>: coordenada em x do primeiro ponto;</li>
<li><strong>y1</strong>: coordenada em y do primeiro ponto;</li>
<li><strong>x2</strong>: coordenada em x do segundo ponto;</li>
<li><strong>y2</strong>: coordenada em y do segundo ponto;</li>
<li><strong>x3</strong>: coordenada em x do terceiro ponto;</li>
<li><strong>y3</strong>: coordenada em y do terceiro ponto.</li>
</ul>
<p>Exemplo de chamada:<br />
<pre name="code" class="java">
triangle(x1, y1, x2, y2, x3, y3);
</pre></p>
<p><pre name="code" class="java">
triangle(10, 10, 10, 70, 80, 70);
triangle(10, 70, 10, 80, 50, 80);
</pre></p>
<p>O triângulo é um polígono fechado. A<a href="http://www.processing.org/reference/fill_.html"> função fill</a> permite que se escolha a cor usada para o preenchimento do triângulo. A cor padrão é o branco (valor 255). A função noFill desabilita o preenchimento.</p>
<blockquote><p><img class="alignnone size-full wp-image-64" title="triangleexemplo1" src="http://www.brunocampagnolo.com/2009ip/wp-content/uploads/2009/03/triangleexemplo1.png" alt="triangleexemplo1" width="109" height="110" /></p>
<p><pre name="code" class="java">
fill(0);
triangle(10, 10, 20, 10, 15, 5);
fill(50);
triangle(20, 20, 30, 20, 25, 15);
fill(100);
triangle(30, 30, 40, 30, 35, 25);
fill(150);
triangle(40, 40, 50, 40, 45, 35);
noFill();
triangle(50, 50, 60, 50, 55, 45);
</pre></p></blockquote>
<blockquote><p><img class="alignnone size-full wp-image-66" title="triangleexemplo21" src="http://www.brunocampagnolo.com/2009ip/wp-content/uploads/2009/03/triangleexemplo21.png" alt="triangleexemplo21" width="109" height="110" /></p>
<p><pre name="code" class="java">
fill(128);
triangle(0, 50, 50, 0, 100, 50);
noFill();
triangle(0, 50, 50, 10, 100, 50);
triangle(0, 50, 50, 20, 100, 50);
triangle(0, 50, 50, 30, 100, 50);
triangle(0, 50, 50, 40, 100, 50);
</pre></p></blockquote>
<p>Por ser formado por uma junção de linhas, o triângulo permite que se escolha o estilo da conexão entre os segmentos através da <a href="http://www.processing.org/reference/strokeJoin_.html">função strokeJoin</a>. Há 3 estilos disponíveis: MITER  (o padrão), BEVEL e ROUND.</p>
<blockquote><p><img class="alignnone size-full wp-image-67" title="triangleexemplo4" src="http://www.brunocampagnolo.com/2009ip/wp-content/uploads/2009/03/triangleexemplo4.png" alt="triangleexemplo4" width="292" height="110" /></p>
<p><pre name="code" class="java">
size(300, 100);
noFill();
strokeWeight(15);
strokeJoin(BEVEL);
triangle(20, 80, 50, 20, 80, 80);
strokeJoin(MITER);
triangle(120, 80, 150, 20, 180, 80);
strokeJoin(ROUND);
triangle(220, 80, 250, 20, 280, 80);
</pre></p></blockquote>
<p>As funções <a href="http://www.processing.org/reference/stroke_.html">stroke</a>, <a href="http://www.processing.org/reference/noStroke_.html">noStroke</a>, <a href="http://www.processing.org/reference/strokeWeight_.html">strokeWeight</a>, <a href="http://www.processing.org/reference/smooth_.html">smooth </a>e <a href="http://www.processing.org/reference/noSmooth_.html">noSmooth</a>, já explicadas nas seções anteriores também valem para o triângulo.</p>
<blockquote><p><img class="alignnone size-full wp-image-68" title="triangleexemplo5" src="http://www.brunocampagnolo.com/2009ip/wp-content/uploads/2009/03/triangleexemplo5.png" alt="triangleexemplo5" width="292" height="193" /></p>
<p><pre name="code" class="java">
size(300, 200);
background(0);
noFill();
smooth();
stroke(255);
strokeWeight(15);

strokeJoin(BEVEL);
triangle(20, 80, 50, 20, 80, 80);
strokeJoin(MITER);
triangle(120, 80, 150, 20, 180, 80);
strokeJoin(ROUND);
triangle(220, 80, 250, 20, 280, 80);

// Os triângulos seguintes possuem serrilhamento
noSmooth();
strokeJoin(BEVEL);
triangle(20, 180, 50, 120, 80, 180);
strokeJoin(MITER);
triangle(120, 180, 150, 120, 180, 180);
strokeJoin(ROUND);
triangle(220, 180, 250, 120, 280, 180);
</pre></p></blockquote>
<h3 style="text-align: justify;">Quadrilátero</h3>
<p>Semelhante ao triângulo, o quadrilátero é determinado a partir de quatro pontos. A <a href="http://www.processing.org/reference/quad_.html">função quad</a> recebe oito parâmetros, dois para cada ponto:</p>
<ul>
<li><strong>x1</strong>: coordenada em x do primeiro ponto;</li>
<li><strong>y1</strong>: coordenada em y do primeiro ponto;</li>
<li><strong>x2</strong>: coordenada em x do segundo ponto;</li>
<li><strong>y2</strong>: coordenada em y do segundo ponto;</li>
<li><strong>x3</strong>: coordenada em x do terceiro ponto;</li>
<li><strong>y3</strong>: coordenada em y do terceiro ponto;</li>
<li><strong>x4</strong>: coordenada em x do quarto ponto;</li>
<li><strong>y4</strong>: coordenada em y do quarto ponto.</li>
</ul>
<p style="text-align: justify;">Exemplo de chamada:</p>
<p><pre name="code" class="java">
quad(x1, y1, x2, y2, x3, y3, x4, y4);
</pre></p>
<p style="text-align: justify;">Dependendo dos parâmetros o polígono gerado pode ser um:</p>
<ul>
<li>retângulo;</li>
<li>quadrado;</li>
<li>paralelogramo;</li>
<li>trapézio;</li>
<li>quadrilátero irregular.</li>
</ul>
<blockquote><p><img class="alignnone size-full wp-image-69" title="quadexemplo1" src="http://www.brunocampagnolo.com/2009ip/wp-content/uploads/2009/03/quadexemplo1.png" alt="quadexemplo1" width="292" height="193" /></p>
<p><pre name="code" class="java">
size(300, 200);
// Quadrilátero irregular
quad(10, 10, 90, 90, 10, 90, 90, 10);
// Quadrado
quad(110, 10, 110, 90, 190, 90, 190, 10);
// Retângulo
quad(10, 110, 10, 190, 190, 190, 190, 110);
// Losango
quad(250, 10, 200, 100, 250, 190,300, 100);
</pre></p></blockquote>
<p style="text-align: justify;"><span style="color: #ff0000;"><br />
</span></p>
<p style="text-align: justify;">Todas as funções (<a href="http://www.processing.org/reference/fill_.html">fill</a>, <a href="http://www.processing.org/reference/strokeJoin_.html">strokeJoin</a>,&nbsp; <a href="http://www.processing.org/reference/stroke_.html">stroke</a>, <a href="http://www.processing.org/reference/noStroke_.html">noStroke</a>, <a href="http://www.processing.org/reference/strokeWeight_.html">strokeWeight</a>, <a href="http://www.processing.org/reference/smooth_.html">smooth </a>e <a href="http://www.processing.org/reference/noSmooth_.html">noSmooth</a>) que alteram o triângulo também podem ser usadas para alteração das propriedades das formas geradas pela função quad.</p>
<h3 style="text-align: justify;">Retângulo</h3>
<p>O retângulo é uma figura geométrica com todos os seus lados separados por ângulos retos (noventa graus). A função rect precisa de 4 parâmetros:</p>
<ul>
<li><strong>x</strong>: coordenada em x do início do retângulo;</li>
<li><strong>y</strong>: coordenada em y do início do retângulo;</li>
<li><strong>w</strong>: largura do retângulo;</li>
<li><strong>h</strong>: altura do retângulo.</li>
</ul>
<p>Exemplo de chamada:<br />
<pre name="code" class="java">
rect(x, y, w, h);
</pre><br />
Se o valor de w for igual ao de h um quadrado é construído.</p>
<p style="text-align: justify;">A <a href="http://www.processing.org/reference/rectMode_.html">função rectMode</a> permite que se altere o comportamento padrão de como um retângulo é desenhado a partir de sua localização.&nbsp; Por padrão, os parâmetros x e y determinam o ponto da lateral superior esquerda do retângulo. Este é o rectMode(CORNER). A sintaxe rectMode(CORNERS) usa o primeiro e o segundo parâmetro como um dos cantos e o terceiro e quarto parâmetros para determinar a posição do outro canto. No caso de rectMode(CENTER), o retângulo é construído a partir do ponto central, ou seja, x e y determinam onde deve ficar o centro do retângulo. Os outros dois parâmetros são usados para a largura e altura do retângulo. Por fim, a chamada a rectMode(RADIUS) especifica que o retângulo deve ser desenhado a partir do ponto central. Mas, desta vez, o terceiro e quarto parâmetros determinam metade da altura e da largura.</p>
<blockquote><p><img class="alignnone size-full wp-image-70" title="rectexemplo1" src="http://www.brunocampagnolo.com/2009ip/wp-content/uploads/2009/03/rectexemplo1.png" alt="rectexemplo1" width="293" height="181" /></p>
<p><pre name="code" class="java">
size(300, 200);
fill(210);
rect(10, 10, 80, 50);
fill(200);
rect(50, 35, 80, 50);
fill(190);
rect(90, 60, 80, 50);
fill(180);
rect(130, 85, 80, 50);
fill(170);
rect(170, 60, 80, 50);
fill(160);
rect(210, 35, 80, 50);
</pre></p></blockquote>
<blockquote><p><img class="alignnone size-full wp-image-71" title="rectexemplo2" src="http://www.brunocampagnolo.com/2009ip/wp-content/uploads/2009/03/rectexemplo2.png" alt="rectexemplo2" width="295" height="196" /></p>
<p><pre name="code" class="java">
size(300, 200);
// rectMode(CORNERS) recebe os pontos de limite do retângulo
rectMode(CORNERS);
rect(10, 10, 30, 30);
rect(30, 30, 50, 50);
rect(50, 50, 70, 70);
rect(70, 70, 90, 90);
noFill();
// rectMode(CENTER) recebe o centro, a largura e a altura
rectMode(CENTER);
rect(50, 50, 90, 90);
// rectMode(RADIUS); recebe o centro e metade da largura e metade da altura
rectMode(RADIUS);
rect(150, 100, 145, 95);
</pre></p></blockquote>
<p>Todas as funções (<a href="http://www.processing.org/reference/fill_.html">fill</a>, <a href="http://www.processing.org/reference/strokeJoin_.html">strokeJoin</a>,&nbsp; <a href="http://www.processing.org/reference/stroke_.html">stroke</a>, <a href="http://www.processing.org/reference/noStroke_.html">noStroke</a>, <a href="http://www.processing.org/reference/strokeWeight_.html">strokeWeight</a>, <a href="http://www.processing.org/reference/smooth_.html">smooth </a>e <a href="http://www.processing.org/reference/noSmooth_.html">noSmooth</a>) que alteram o triângulo e o quadrilátero também podem ser usadas para alteração das propriedades das formas geradas pela função rect.</p>
<h2 style="text-align: justify;">Resumo</h2>
<p><span style="color: #000000;">Neste capítulo começamos a percorrer o caminho com a Programação de Computadores. Conhecemos o ambiente Processing, que utilizaremos neste curso para a prototipação rápida de desenhos, animações, interações e programas em geral. A visão do Processing trabalhada hoje se limitou à utilização como ferramenta de desenho. Da Lógica de Programação, entendemos melhor qual é a anatomia de um programa: comentários, funções, constantes, etc. Por fim, algumas funções de geração de gráficos 2d foram exploradas e exemplificadas.<br />
</span></p>
<h2 style="text-align: justify;">O que vem pela frente?</h2>
<p><span style="color: #ff0000;"><span style="color: #000000;">No próximo capítulo o foco será o Processing como ferramenta de animação e de tipografia básica. Para que ele possa ser usado desta maneira, o conceito de modo contínuo será apresentado. Além disso, outro assunto relevante será a utilização de variáveis.</span><br />
</span></p>
<h2 style="text-align: justify;">Exercícios Propostos</h2>
<p><span style="color: #ff0000;"><span style="color: #000000;">A) </span><span style="color: #000000;">Na aula de hoje você conheceu uma série de comandos para o desenho de primitivas gráficas. Vamos treinar sua aplicação. Usando <strong>pelo menos</strong> as funções: point, line, triang, quad e rect desenhe um robô. Você tem liberdade para o desenho que quiser, mas o lado direito do robô deve ser simétrico em relação ao lado esquerdo.</span></span></p>
<p>Para entregar este exercício proposto, use <a href="http://spreadsheets.google.com/viewform?formkey=cEQ1eGlGS0U5b2oxNFV4SXVuYXVMZnc6MA..">este link</a>.</p>
<p>B) Treine a construção do esboço de outras figuras. Sugestões:</p>
<ul>
<li>Tabuleiro quadrado de 3 x 3;</li>
<li>Jogo da velha na posição inicial;</li>
<li>Seta;</li>
<li>Bandeira do Brasil;</li>
<li>Casa;</li>
<li>etc&#8230;</li>
</ul>
<p><!--[if !mso]> <mce:style><!  v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VML);} p\:* {behavior:url(#default#VML);} .shape {behavior:url(#default#VML);} v\:textbox {display:none;} --> <!--[endif]--><!--[if !ppt]--><!-- .O 	{color:gray; 	font-size:149%;} .O1 	{color:gray; 	font-size:149%;} a:link 	{color:#3333CC !important;} a:active 	{color:#B840A1 !important;} a:visited 	{color:#AF67FF !important;} --><!-- .sld 	{left:0px !important; 	width:6.0in !important; 	height:4.5in !important; 	font-size:103% !important;} --><!--[endif]--></p>
<div>
<div class="O1"><span style="font-family: Verdana; font-size: 178%;"><span style="position: absolute; left: -5.24%; font-family: Arial;">–</span></span></div>
<div class="O1"><!--[if ppt]--><span style="font-family: Verdana; font-size: 178%; visibility: hidden;"><span style="position: absolute; left: -5.24%; font-family: Arial;">–</span></span><!--[endif]--><span style="font-family: Verdana; font-size: 32pt;"> </span></div>
</div>
<h2 style="text-align: justify;">Para saber mais</h2>
<p>Shiffman, Daniel. Coordinated Systems and Shapes, 2008, Disponível em: <a href="http://www.processing.org/learning/tutorials/basics/">http://www.processing.org/learning/tutorials/basics/</a></p>
<p><span style="color: #000000;">Reas, Casey. Fry, Ben. Processing: A Programming Handbook for Visual Designers and Artists. Páginas 23 a 36. Disponível parcialmente em: <a href="http://www.processing.org/img/learning/Processing-Sample-070607.pdf">http://www.processing.org/img/learning/Processing-Sample-070607.pdf</a></span></p>
<p>Referência do Processing em Português. Disponível em: <a href="http://www.dainf.cefetpr.br/~merkle/processing/reference/ptBR/index_ext.html">http://www.dainf.cefetpr.br/~merkle/processing/reference/ptBR/index_ext.html</a></p>
<p>Referência do Processing em Inglês. Disponível em: <a href="http://www.processing.org/reference/index.html">http://www.processing.org/reference/index.html</a></p>
<p>Capítulo 2 do Livro &#8220;Lógica de Programação &#8211; A Construção de Algoritmos e  Estruturas de Dados&#8221; de Forbellone e Eberspächer. Páginas 17 a 21.</p>
<p class="bcp-corpo">Capítulo 1 do Livro &#8220;Algoritmos Estruturados&#8221; de Farrer e  outros. Páginas 47 a 50.</p>
<p class="bcp-corpo">&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.brunocampagnolo.com/2009ip/2009/03/03/aula-01-introducao-a-programacao-de-computadores-usando-processing/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>

