Introdução a Matemática e Física

Propaganda
Introdução a Matemática e Física
Não há como fugir delas — se você quer aprender IA, você tem que saber um pouco de
matemática e física. Com certeza você pode usar muitas técnicas de IA através de "copiar e colar", mas
você estará se prejudicando; no momento em que precisar resolver um problema ligeiramente diferente de
um que você copiou o código, você terá sérias dificuldades. Porém se você entender a teoria por trás das
técnicas, você terá uma chance muito melhor de desenvolver uma solução alternativa para o seu
problema. Além disso, é uma boa prática entender a ferramenta com que se trabalha. E qual a melhor
razão para você aprender essas coisas do que essa?
Eu estou escrevendo este capítulo assumindo que você sabe pouca coisa sobre matemática ou
física. Assim me perdoe se já sabe a maior parte do que for ensinado, mas eu acredito que desta maneira
eu alcançarei todos, não interessando a experiência do leitor. Vá passando o capítulo até você ver algo
que não sabe ou encontrar um tópico onde acha que precisa refrescar a sua memória. Nesse ponto,
comece a ler. Se você já está confortável com matemática de vetores e física do movimento, eu sugiro que
pule este capítulo inteiro e só volte se encontrar algo que não entende.
1. Matemática
Começaremos com matemática, pois tentar aprender física sem matemática é como tentar voar
sem asas.
1.1 Coordenadas Cartesianas
Você provavelmente já está familiarizado com o sistema de coordenadas Cartesianas. Se você
alguma vez, fez um programa que desenhasse imagens na tela então você com certeza usou o sistema de
coordenadas Cartesianas para descrever as posições dos pontos, linhas e bitmaps que formavam a
imagem.
Em duas dimensões, o sistema de coordenadas é definido por dois eixos posicionados a um ângulo
reto um do outro e marcados com unidades de comprimento. O eixo horizontal é chamado de eixo x e o
eixo vertical é o eixo y. O ponto onde os eixos se cruzam é chamado de origem. Veja a Figura 1.1.
Figura 1.1: O sistema de coordenadas Cartesianas
A ponta das setas de cada eixo na Figura 1.1 indicam a direção onde eles se estendem
infinitamente. Se você se imaginar segurando uma folha de papel infinita com os eixos x e y desenhados
nela, o papel representa o plano xy — o plano onde todos os pontos no sistema de coordenadas
Cartesiano bidimensional poderão ser inseridos. Um ponto no espaço 2D é representado por um par de
coordenadas (x, y). Os valores de x e y representam as distâncias ao longo dos respectivos eixos. Hoje em
dia, uma série de pontos ou linhas inseridos em um sistema de coordenadas Cartesiano é usualmente
chamada de gráfico, o que evita um bocado de digitação também. :o)
Nota Para representar o espaço tridimensional, um outro eixo é necessário — o eixo z. O eixo z “sai da
tela” do computador, passando pela origem. Veja a Figura 1.2.
Figura 1.2: Um sistema de coordenadas de três eixos (3D)
1.2 Funções e Equações
O conceito de funções é fundamental para a matemática. Uma função expressa o relacionamento
entre dois (ou mais) termos chamados variáveis, e é tipicamente escrita na forma de uma equação (um
conjunto de expressões algébricas igual a uma outra expressão algébrica). As variáveis são chamadas
assim porque, como o nome implica, seus valores podem variar. As variáveis são expressadas usualmente
com letras do alfabeto. As duas variáveis mais comuns que você verá sendo usadas em equações
matemáticas são x e y (entretanto qualquer letra ou símbolo também é valido).
Se cada valor de x pode ser associado com um outro valor de y, então y é uma função de x. O y
então é chamado de variável dependente já que seus valores dependem do valor de x. Aqui um par de
exemplos:
(1.1)
(1.2)
No segundo exemplo, o m e o c representam constantes (algumas vezes chamados coeficientes) —
valores que nunca mudam, não interessando o valor de x. Eles são efetivamente similares ao 2 na equação
(1.1). Portanto, se a = 2, a equação (1.1) pode ser escrita da seguinte maneira:
(1.3)
Dado qualquer valor de x, o valor correspondente de y pode ser calculado pela colocação do valor
de x na função. Sendo x = 5 e x = 7 a função y =2x, os valores de y serão:
(1.4)
Neste tipo de função, onde o y depende unicamente do valor de uma única outra variável, é
chamada de função de variável-simples. As funções de variável-simples podem ser visualizadas pelo
desenho delas no plano Cartesiano xy. Para desenhar uma função, tudo o que você tem de fazer é moverse ao longo do eixo x e para cada valor de x use a função para calcular o valor de y. É claro que é
impossível desenhar um gráfico para cada valor de x — isso pode demorar para sempre (literalmente) —
então você deve selecionar um conjunto de valores.
A esquerda da Figura 1.3 é mostrado como a função y =2x parece quando desenhada no plano xy,
usando um conjunto de valores de x entre -5.0 e 5.0.
Figura 1.3: Funções desenhadas no espaço Cartesiano
Para desenhar a função y = mx + c em um gráfico, você deve primeiro ter alguns valores para as
constantes m e c. Vamos dizer que m = 2 e c = 3, dada a função y =2x + 3. O direita da Figura 1.3 mostra
o gráfico resultante.
Os gráficos parecem muito similares não é? Isso é porque y = mx + c é a função que define todas
as linhas retas no espaço 2D. A constante m define a inclinação da linha e a constante c dita onde a linha
intersecta o eixo y. A função y =2x, mostrada na esquerda da figura, é equivalente a função y = mx + c,
onde m = 2 e c = 0. O gráfico da direita é quase idêntico, porém, o valor c é 3, o ponto onde a linha
intersecta o eixo y é levantado em três unidades.
Algumas vezes você verá uma função como y=mx+c escrita assim:
(1.5)
A notação f(x) está declarando que a variável dependente — neste exemplo, o y — depende da
variável x na expressão dada no lado direito da equação, mx+c. Entretanto, você verá outros símbolos
além de um f para representar a função, então não se preocupe de ver algo como.
(1.6)
O g(x) representa exatamente a mesma coisa se a equação fosse escrita assim:
(1.7)
As funções podem depender de mais de uma variável. Tome o cálculo de área de um retângulo,
por exemplo. Se o comprimento é denotado pela letra l (length), e a largura por w (width), então a área A
e dada pela equação:
(1.8)
Para desenhar uma função de duas variáveis como (1.8) em um gráfico, uma terceira dimensão, z,
deve ser adicionada, perpendicularmente aos outros eixos. Agora é possível desenhar A no eixo z, l no
eixo x e w no eixo y. Veja a Figura 1.4.
Figura 1.4: A função A = lw desenhada em três dimensões
O volume de um cubo é dado por uma função de três variáveis:
(1.9)
Onde o h representa a altura (height) do cubo. Para desenhar isso em um gráfico você precisa
adicionar um quarto eixo. Infelizmente, a menos que sob influência de compostos psicotrópicos, humanos
não podem ver mais do que três dimensões. Entretanto, nós temos a habilidade de imaginar, então é isso o
que você tem que fazer se quiser desenhar funções com mais de três variáveis em um gráfico. Os
matemáticos parecem achar isso fácil de fazer, mas muitos programadores, incluindo eu, não!
Nota O espaço que uma função n-dimensional ocupa, onde n é maior que 3, é frequêntemente chamado
de hiperespaço pelos matemáticos.
1.2.1 Expoentes e Potências
Uma função exponencial é definida assim:
(1.10)
O a é conhecido como base e o x como potência (ou expoente). Se a equação é falada, você diz
que f(x) é igual a a elevado a x. Isso significa que a é multiplicado por ele mesmo x quantidade de vezes.
Então se 72 é o mesmo que escrever 7x7, e 34 é o mesmo que 3x3x3x3. Um número elevado a 2 é
conhecido como o quadrado do número e um número elevado a 3 é conhecido como cubo. Sendo assim, o
cubo de 5 é:
(1.11)
A Figura 1.5 mostra a equação (1.10) desenhada em um gráfico onde a = 2. A curva mostra
claramente como o valor de y cresce rapidamente com x. Este tipo de curva é frequentemente chamado de
crescimento exponencial.
x
Figura 1.5: A função f(x) = 2 desenhada no plano xy
Nota Histórica
Por uma razão perdida no tempo, os matemáticos decidiram que usariam a parte final
do alfabeto para representar variáveis e o resto dele para representar constantes. Esta
é a razão porque os eixos no sistema de coordenadas Cartesiano são intitulados x, y e
z.
1.2.2 Raízes (Radicais)
A raiz quadrada de um número é o valor que multiplicado por ele mesmo resulta nesse número.
As raízes quadradas são escritas usando o símbolo radical
seguinte maneira:
. Assim, a raiz quadrada de 4 é escrita da
(1.12)
Nós podemos usar esta equação também para mostrar o relacionamento entre potência e raiz:
(1.13)
A raiz quadrada de um número é também conhecida como a segunda raiz desse número. Nós
também podemos calcular a terceira, quarta, quinta ou qualquer tamanho da raiz de um número. A
terceira raiz de um número é conhecida como raiz cúbica e é escrita assim:
. Note como precisamos
do 3 para dizer que a raiz é a terceira. A raiz cúbica de um número da um valor que quando multiplicado
pela potência de três resulta nesse número. Por exemplo:
(1.14)
Mais uma vez podemos mostrar nessa equação a relação entre potência e raiz:
(1.15)
Também é possível escrever a raiz de um número como um expoente fracional. Por exemplo, a
raiz quadrada de um número pode ser escrita como
, e a raiz cúbica como
e assim por diante.
1.2.3 Simplificação de Equações
Volta e meia, para resolver uma equação você deve primeiro simplificá-la. Um dos princípios para
chegar a isso é que podemos adicionar, subtrair, dividir ou multiplicar termos de ambos os lados. (Há uma
exceção a esta regra: O termo não deve ser zero quando multiplicado ou divido.) Enquanto a mesma coisa
for feita em ambos os lados, então estes permanecerão iguais. Isto é mais bem compreendido com a ajuda
de alguns exemplos.
Exemplo 1
Considere a seguinte equação:
(1.16)
Essa equação pode ser simplificada pela subtração de 7 de ambos os lados.
(1.17)
Ela pode logo então se simplificada pela adição de 2x em ambos os lados:
(1.18)
Podemos então dividir ambos os lados por 5, dando a resposta para x:
(1.19)
Vamos passar para um exemplo ligeiramente mais complexo.
Exemplo 2
Vamos dizer que queremos resolver o seguinte para y:
(1.20)
Primeiro de tudo podemos remover os parênteses pela multiplicação dos termos de dentro (3x 5y), pelo termo de fora (2), dando:
(1.21)
A seguir, seria uma boa idéia remover todos os termos fracionais pela multiplicação de todos os
termos de ambos os lados pelos denominadores das frações (os denominadores são os valores embaixo da
linha). Neste exemplo, a multiplicação de todos os termos de ambos os lados da equação (1.21) por 3 dá:
(1.22)
Até este ponto temos um termo y na esquerda e os termos x e y na direita. Precisamos transpor
termos similares para que eles compartilhem o mesmo lado na equação (separar os y dos x). Neste
exemplo podemos fazer isso adicionando 30y em ambos os lados.
(1.23)
Agora que temos os termos agrupados podemos combiná-los. Assim:
(1.24)
Finalmente, podemos dividir ambos os lados pelo coeficiente de uma das variáveis. Neste
exemplo estamos resolvendo para y então devemos dividir ambos os lados por 33, dando:
(1.25)
Exemplo 3
Aqui estão algumas regras a mais que podem vir a ser úteis quando simplificamos equações:
(1.26)
(1.27)
(1.28)
(1.29)
(1.30)
Vamos dar uma olhada nessas novas regras em ação. Desta vez a equação para simplificar é:
(1.31)
Usando a regra (1.29) temos:
(1.32)
Pela multiplicação de ambos os lados por x para dispensar a parte fracional temos:
(1.33)
Agora para tirar os parêntesis da esquerda:
(1.34)
Para remover os parêntesis da direita usamos a regra (1.28):
(1.35)
Adicionando 2xy em ambos os lados, temos:
(1.36)
Pela subtração de x2 dos dois lados e rearranjando a para simplificar a equação:
(1.37)
A etapa final é tirar a raiz quadrada dos dois lados:
(1.38)
A simplificação de equações pode ser bem mais difícil é claro, mas estas poucas regras são o
bastante para você entender qualquer simplificação apresentada neste livro.
1.3 Trigonometria
A trigonometria é baseada no estudo dos triângulos. A palavra vem do grego trigon, triângulo e
metria, medida. Este é um campo enormemente útil da matemática e possui muitas aplicações práticas na
informática. No campo da IA para jogos, você a encontrará sendo usada em cálculos de linha de visão
(LOS - line-of-sight), detecção de colisão, alguns aspectos do pathfinding, etc. Muito da IA é dependente
da matemática; então será muito vantajoso você aprender isto bem.
1.3.1 Raios e segmentos de linha
Um raio é uma linha com apenas uma ponta. Ele tem comprimento infinito e é definido por uma
direção (usualmente expressada como um vetor normalizado; veja a seção sobre vetores mais tarde neste
capítulo) e uma origem. A Figura 1.6 mostra um raio situado na origem.
Figure 1.6: Um segmento de linha e um raio
Um segmento de linha é a b de uma linha e é definido por duas pontas. A Figura 1.6 também
mostra um segmento de linha definido por dois pontos p1 e p2.
1.3.2 Ângulos
Um ângulo é definido como a medida de divergência de dois raios que compartilham a mesma
origem. Veja a Figura 1.7.
Figura 1.7: Um ângulo
Você pode estar acostumado a pensar em ângulos em termos de graus. As paredes na maioria das
casas ficam a ângulos de 90 graus uma das outras, por exemplo, e círculos possuem 360 graus de
circunferência. Os matemáticos preferem medir a magnitude de um ângulo usando radianos. Radianos é
uma unidade de medida baseada em um circulo de uma unidade de raio — um raio de 1 — centrado na
origem. O raio de um circulo é a distância do centro do círculo até seu perímetro. Desenhando os dois
raios da Figura 1.7 no mesmo diagrama com um circulo, temos a Figura 1.8. O comprimento do segmento
de linha curvada entre os dois raios — mostrado no diagrama como uma linha pontilhada — é o ângulo
medido em radianos entre eles.
Figura 1.8: O comprimento da linha pontilhada é o ângulo em radianos entre os dois raios.
Agora que você sabe o que é um radiano, vamos calcular quantos radianos têm um circulo. Você
pode se lembrar da letra grega pi (π) dos seus dias de escola. Ela é bem conhecida e é frequêntemente
usada como uma constante matemática de valor 3.14159 (aqui só com cinco casas decimais). Você pode
usar o pi para calcular a circunferência de um circulo — a distância ao redor do perímetro inteiro —
usando a equação:
(1.39)
Usando essa equação para determinar o perímetro um circulo de uma unidade (raio 1) nós
obtemos o número de radianos de um circulo. Isso porque o número de radianos em um circulo é o
comprimento do perímetro do circulo com raio 1. Então apenas substituímos 1 por r na equação (1.39)
para ter:
(1.40)
Portanto, há 2π radianos em cada circulo.
Dica Agora que você sabe quantos radianos fazem um circulo, você pode converter entre radianos e graus
sempre que quiser. Há 360 graus em um circulo, isso significa que:
360° = 2 π rads
Dividindo ambos os lados por 360 temos:
1° = 2 π /360 rads
Os ângulos são usualmente denotados usando a letra grega theta (θ).
Nota do Tradutor No Brasil é comum nas aulas de matemática (de escolas ou universidades) não
usar-se o termo raio (tradução de ray) para se referir a vetores com uma posição de
origem definida para não haver confusão com o raio das circunferências (tradução
de radius).
1.3.3 Triângulos
Um triângulo consiste em três segmentos de linha conectados em suas pontas. A soma do ângulo
dos 3 cantos de cada triângulo sempre é π radianos (180 graus). A Figura 1.9 mostra os diferentes tipos de
triângulos que você pode encontrar.
Figura 1.9: Os diferentes tipos de triângulo
•
•
•
•
•
•
•
Um triângulo eqüilátero (equilateral) tem todos os lados de comprimento igual. Os triângulos com
esta propriedade também possuem ângulos de tamanho igual;
Um triângulo isosceles possui dois lados e dois ângulos de tamanho igual;
Um triângulo retângulo (right-angled) possui um dos ângulos com π/2 radianos (90 graus) — um
ângulo reto. O ângulo reto é sempre representado por um quadrado;
Um triângulo agudo (acute) tem todos os ângulos agudos (menores que π/2 radianos);
Um triângulo obtuso (obtuse) possui um ângulo obtuso (maior que π/2 radianos);
Um triângulo escaleno não possui nenhum lado ou ângulo igual.
Um triângulo oblíquo não possui nenhum ângulo reto.
Teorema de Pitágoras
Os triângulos que você usará em sua maioria são triângulos retângulos. Eles possuem muitas
propriedades interessantes, das quais você pode fazer bom uso. Possivelmente a mais famosa propriedade
dos triângulos retângulos foi descoberta por Pitágoras, um matemático grego que viveu de 569 a 475 AC.
Ele foi um cara muito inteligente mesmo e sua mais famosa declaração é a seguinte:
O quadrado da hipotenusa de um triângulo retângulo é igual a soma dos quadrados dos catetos.
A hipotenusa de um triângulo é o lado mais longo, como mostrado na Figura 1.10.
Figura 1.10
Nota do Tradutor No texto em inglês original o autor não usava nenhum termo que se pudesse
traduzir por “cateto”, em vez disso ele chama esses lados do triângulo de “outros
dois lados do triângulo” ou “lado oposto” e “lado adjacente”. Por isso de agora em
diante será usada a nomeação do autor. O dicionário de inglês-inglês usado pelo
tradutor é o WordWeb Pro 5.2 e ele não possui nenhuma referência a um termo em
inglês equivalente a “cateto”.
Se a hipotenusa é denotada por h, o teorema de Pitágoras pode ser escrito assim:
(1.41)
Tirando a raiz quadrada de ambos os lados, temos:
(1.42)
Isso significa que se soubermos o comprimento de dois lados qualquer de um triângulo retângulo,
podemos facilmente encontrar o comprimento do terceiro lado.
Dica Quando você trabalhar com IA para jogos você frequêntemente se encontrará usando o teorema de
Pitágoras para calcular se o Agente A está mais perto de um objeto que o Agente B. Isso pode
normalmente requerer duas chamadas a função de raiz quadrada, a qual, como todos devem saber,
é lenta e deve ser evitada sempre que possível. Felizmente, quando comparamos os comprimentos
dos lados de dois triângulos (a soma dos quadrados dos catetos somente), se os lados do triângulo
A forem maiores que os lados de B, então o A sempre será maior, sejam os lados quadrados ou
não. Isso significa que podemos evitar de tirar raízes quadradas somente para comparar distâncias.
Isto é conhecido como trabalho no espaço da distância quadrada e é algo que você verá
frequêntemente nos códigos mostrados neste livro.
Um exemplo prático do Teorema de Pitágoras
Vamos dizer que você tem um arqueiro na posição A (8, 4) e seu alvo na posição T (2, 1). O
arqueiro pode somente disparar uma flecha a uma distância máxima de 10 unidades. Consequentemente,
para determinar se ele pode atingir seu alvo, a distância até ele deve ser calculada. Isso é fácil de
determinar usando-se o teorema de Pitágoras. Primeiro, os comprimentos dos lados de TP e AP
mostrados na Figura 1.11 são calculados.
Figure 1.11
Para encontrar a distância AP, o componente y da posição do arqueiro é subtraído do componente
y da posição do alvo:
(1.43)
Para encontrar a distância TP, fazemos o mesmo, mas com os componentes x:
(1.44)
Agora que TP e AP são conhecidos, a distância do arqueiro até o alvo pode ser calculada pelo uso
do teorema de Pitágoras:
(1.45)
Bem dentro do alcance. Deixe a flecha voar!
Os Mistérios de SohCahToa Revelados
Se você conhece o comprimento de um dos lados de um triângulo retângulo e um dos dois ângulos
remanescentes (fora o ângulo reto), você pode determinar tudo sobre o triângulo usando trigonometria.
Primeiro, olhe a Figura 1.12. Ela mostra os nomes de cada lado de um triângulo retângulo.
Figura 1.12: Nomes dos lados de um triângulo
O lado oposto ao ângulo é chamado de oposto (opposite) (surpresa, surpresa) e o lado que fica
entre o ângulo e o ângulo reto é chamado de adjacente (adjacent). Há três funções trigonométricas que
ajudam a calcular as características de um triângulo retângulo. Você provavelmente conhece elas da
escola. Elas são o seno, o cosseno e o tangente, e são comumente abreviadas como sin, cos e tan (em
inglês). Isto é o que elas representam:
(1.46)
(1.47)
(1.48)
Será muito útil você memorizar esses três relacionamentos porque você os usará frequêntemente.
Minha professora de matemática me ensinou a memorizá-las com uma palavra mnemônica: Soh-Cah-Toa,
pronunciado "sôcátua" (aí você imagina uma cacatua). Embora isso pareça esquisito, é fácil de dizer e
fácil de lembrar.
Nota do Tradutor A pronúncia em inglês é "sowcahtowa" (onde "sow" e "tow" rimam com "know").
O recurso mnemônico foi adaptado para o português, pois a associação de palavras
com animais é tão poderosa quanto à associação com um verso como no original.
Se você não entendeu a palavra ela é uma sigla para “Seno é Oposto sobre
Hipotenusa, Cosseno é o Adjacente sobre a Hipotenusa e o Tangente é o Oposto
sobre o Adjacente”.
A melhor maneira de ver como as funções de seno, cosseno e tangente podem ser usadas é vendo
alguns exemplos.
Dica Quando trabalhar nos seguintes problemas com uma calculadora (na imagem a do Windows),
assegure-se de trabalhar com radianos e não com graus!
Dê uma olhada na Figura 1.13.
Figura 1.13
Queremos calcular o comprimento do lado oposto, tendo o comprimento do lado adjacente e o
ângulo. Apartir da SohCahToa podemos lembrar que o tangente de um ângulo é igual ao lado oposto
sobre o adjacente. Rearranjando a equação um pouco, temos:
(1.49)
Então tudo o que temos de fazer é para obter o o é pegar uma calculadora (para determinar o
tangente) e colocar os números, assim:
(1.50)
Fácil pra chuchu. Certo, vamos tentar outro, só que desta vez você tentará resolver primeiro.
Calcule o comprimento do lado h mostrado na Figura 1.14 .
Figura 1.14
Você conseguiu? Neste exemplo sabemos o ângulo e o lado oposto. Recordando a SohCahToa,
vemos que será a função seno que devemos usar porque o seno de um ângulo é igual ao oposto sobre a
hipotenusa. Rearranjando a equação temos:
(1.51)
E colocando os números temos:
(1.52)
Até aqui tudo bem. Mas como resolver o problema mostrado na Figura 1.15? Desta vez você terá
que encontrar o ângulo, sabendo apenas o comprimento do adjacente e da hipotenusa.
Figura 1.15
Desta vez nosso amigo é a função cosseno, mas ao colocar os números temos um problema.
(1.53)
Sabemos que o cosseno do ângulo é 0.769, mas qual é o ângulo? Como faremos para encontrá-lo?
Bem, o ângulo é determinado usando-se o cosseno inverso. Isso é normalmente escrito como cos-1. Então,
tudo o que você precisa fazer é usar o botão do cosseno inverso na calculadora (se você não tem cos-1 na
sua calculadora, você terá de apertar o botão inverse antes do botão do cosseno, na calculadora do
Windows é o checkbox Inv que faz isso) para obter o resultado:
(1.54)
Aqui terminam as lições sobre trigonometria. Entretanto, este é um assunto vasto, o teorema de
Pitágoras e a SohCahToa são toda a teoria sobre trigonometria que iremos precisar no resto deste livro.
1.4 Vetores
Você usará a matemática dos vetores frequêntemente quando projetar a IA para seus jogos. Os
vetores em tudo, desde o cálculo em qual direção um agente do jogo poderá disparar sua arma até a
expressão de entradas e saídas de uma rede neural artificial. Os vetores são seus amigos. Você deverá
conhecê-los bem.
Você já aprendeu que um ponto no plano Cartesiano pode ser expresso como dois números, como
isto:
(1.55)
Um vetor 2D parece igual, abaixo temos um:
(1.56)
Entretanto, embora similares, um vetor representa dois valores: direção e magnitude. O lado
direito da Figura 1.16 mostra o vetor (9, 6) situado na origem.
Figura 1.16: Um ponto P e um vetor V
Nota Os vetores são tipicamente denotados em negrito ou como uma letra com uma seta em cima como
esta: . Eu usarei a notação em negrito neste livro.
O rumo da seta mostra a direção do vetor e o comprimento da linha representa a magnitude deste.
Certo, até aqui tudo bem. Mas o que isso significa? Qual o uso disso? Bem, para iniciantes, um vetor
pode representar a velocidade de um veículo. A magnitude do vetor representa a velocidade do veiculo e
a direção representa para onde o veículo está indo. Realmente é muita informação em apenas dois
números (x, y).
Os vetores não são restritos a duas dimensões também. Eles podem ter qualquer tamanho. Você
pode usar um vetor 3D (x, y, z), por exemplo, para representar a velocidade de um veículo que se move
em três dimensões, como um helicóptero.
Vamos dar uma olhada em algumas coisas que você pode fazer com vetores.
1.4.1 Adição e Subtração de Vetores
Imagine que você é um concorrente em um reality show de TV. Você está em uma clareira na
selva. Vários outros concorrentes estão ao seu lado. Você está muito nervoso e excitado porque o prêmio
do vencedor é namorar a Cameron Diaz… e os perdedores terão de assistir. O suor está correndo na sua
testa, suas mão estão úmidas e você lança olhares nervosos para os outros competidores. Os passos do
apresentador de TV bronzeado, com queixo de bigorna seguem enquanto ele entrega nas mãos de cada
competidor um envelope com enfeites dourados. Seus passos voltam e ele ordena que você e todos os
outros abram seus envelopes. A primeira pessoa a completar as instruções será o vencedor. Você
freneticamente dilacera o papel. Dentro há uma nota. Ela diz:
Eu estou esperando por você em um lugar secreto. Por favor, corra, está muito quente aqui. Você pode
chegar a este lugar seguindo os vetores (-5, 5), (0, -10), (13, 7), (-4, 3).
Cameron
Com um sorriso em sua face você vê o resto dos outros competidores correr na direção do
primeiro vetor. Você faz alguns cálculos atrás do envelope e então vai numa direção completamente
diferente, sem nenhuma pressa. Depois de um tempo os outros competidores alcançam o esconderijo de
Cameron, suando como queijo velho e arfando, eles então ouvem suas risadas nervosas e o barulho da
água refrescante de um chuveiro…
Você derrotou seus oponentes porque sabia como adicionar vetores. A Figura 1.17 mostra a rota
que todos os outros competidores tomaram ao seguirem os vetores dados na nota de Cameron.
Figura 1.17: A rota dos oponentes
Você sabia, entretanto, que se adicionasse todos os vetores você obteria um simples vetor como
resultado: um que o levaria diretamente ao destino final. Para adicionar vetores você simplesmente
adiciona todos os valores x para obter o componente x do resultado, e o mesmo como os valores y para
obter o componente y. Ao adicionar os quatro vetores na nota de Cameron temos:
(1.57)
Resultando no vetor (4, 5), exatamente o mesmo resultado se seguíssemos cada vetor
individualmente. Veja a Figura 1.18.
Figura 1.18: A sua rota
1.4.2 Multiplicação de Vetores
Multiplicar vetores é moleza. Você apenas multiplica cada componente pelo valor. Por exemplo, o
vetor v (4, 5) multiplicado por 2 é (8, 10).
1.4.3 Cálculo da Magnitude de um Vetor
A magnitude de um vetor é seu comprimento. No exemplo anterior, a magnitude do vetor v (4, 5)
é a distância do ponto inicial até o esconderijo de Cameron.
Figura 1.19: A descoberta da magnitude de um vetor
Isso é fácil de calcular usando o teorema de Pitágoras.
(1.58)
Se você tem um vetor tridimensional então você pode usar uma equação similar:
(1.59)
Os matemáticos colocam duas barras verticais em volta de um vetor para denotar seu
comprimento.
(1.60)
1.4.4 Normalização de Vetores
Quando um vetor é normalizado, ele retém sua direção, mas sua magnitude é recalculada para que
tenha uma unidade de comprimento (um comprimento de 1). Para fazer isso você divide cada componente
do vetor pela magnitude dele. Os matemáticos escrevem uma fórmula como esta:
(1.61)
Entretanto, para normalizar o vetor (4, 5) você pode fazer isto:
(1.62)
Isso pode parecer uma coisa estranha de se fazer em um vetor de fato, mas vetores normalizados
são incrivelmente úteis. Você saberá o porquê em breve.
1.4.5 Resolução de Vetores
É possível se usar trigonometria para transformar um vetor em dois vetores separados, um paralelo
ao eixo x e o outro ao eixo y. Dê uma olhada no vetor v, representando a velocidade aceleração de um
avião caça mostrado na Figura 1.20.
Figura 1.20
Para resolver v em seus componentes x/y precisamos encontrar Oa e Ob. Isto nos dará o
componente da velocidade do avião que está agindo no eixo y, e o componente que está agindo no eixo x,
respectivamente. Outra maneira de interpretar é que Oa é a quantidade de velocidade aceleração agindo
no eixo x, e Ob é a quantidade agindo no eixo y.
Primeiro, vamos calcular a quantidade de velocidade ao longo do eixo y: Oa. Apartir da
trigonometria que conhecemos:
(1.63)
Rearranjando temos:
(1.64)
Para calcular Ob, esta equação é usada:
(1.65)
Dando:
(1.66)
1.4.6 O Produto Escalar (Dot Product)
O produto escalar é o ângulo entre dois vetores — algumas vezes você precisará calcular isso
quando programar uma IA. Dado dois vetores 2D u e v, a equação é a seguinte:
(1.67)
O símbolo • denota o produto escalar (em inglês, ponto é dot). Entretanto a equação (1.67) não nos
dá um ângulo. Eu prometi um ângulo, então você terá um! Aqui uma outra maneira de calcular o produto
escalar:
(1.68)
Rearranjando temos:
(1.69)
Lembre que as linhas verticais em volta do vetor indicam a sua magnitude. Agora é quando você
descobre um dos usos úteis da normalização de vetores. Se v e u são ambos normalizados, então a
equação é simplificada enormemente:
(1.70)
Substituindo a equação (1.67) pelo lado direito temos:
(1.71)
Dando a equação para o ângulo entre vetores.
Um grande uso do produto escalar é que ele pode rapidamente informar se uma entidade está atrás
ou na frente do plano de face de outra. Como assim? Veja a Figura 1.21.
Figura 1.21
A figura mostra um agente do jogo de face para o norte. A linha horizontal é relativa ao agente e
descreve seu plano de face. Tudo que estiver na frente dessa linha pode ser dito que está na frente do
agente.
Usando-se o produto escalar é fácil determinar se um objeto está na frente ou atrás do agente. O
produto escalar do vetor da face do agente (Facing) e o vetor do agente para o objeto, será positivo se o
objeto está na frente do plano de face do agente e negativo se estiver atrás.
1.4.7 Um exemplo prático da matemática dos vetores
Aqui está um exemplo com alguns dos métodos para vetores que você aprendeu. Vamos dizer que
você tem um agente de jogo, Eric o Troll, que está na posição T (a origem) e de face para a direção dada
pelo vetor normalizado H (para heading, direção em inglês). Ele pode farejar uma princesa desamparada
na posição P e gostaria muito de bater com sua clava nela, para amaciá-la um pouco, antes de parti-la em
pedaços. Para fazer isso, ele precisa saber quantos radianos ele deve rotacionar para ficar de face para ela.
A Figura 1.22 mostra a situação.
Figura 1.22
Você descobriu que pode calcular o ângulo entre dois vetores usando o produto escalar.
Entretanto, neste problema você tem somente um vetor para começar, H. Precisamos determinar o vetor
— o vetor que aponta diretamente para a princesa. Isso é calculado pela subtração do ponto T do
ponto P. Porque T é a origem (0, 0), neste exemplo P-T = P. Assim, a resposta de P-T é um vetor, então
vamos mostrar isso digitando em negrito e chamando de P.
Sabemos que o cosseno do ângulo que o troll precisa girar para ficar de face para a princesa é
equivalente ao produto escalar de H e P, providenciando ambos os vetores normalizados. O H já está
normalizado, então apenas precisamos normalizar o P. Lembre que para normalizar um vetor, seus
componentes são divididos pela sua magnitude. Consequentemente, a normal de P (NP) é:
(1.72)
O produto escalar pode agora ser usado para determinar o ângulo.
(1.73)
Então:
(1.74)
Para clarear o processo, vamos fazer a coisa toda de novo, mas com alguns números. Vamos dizer
que o troll está situado na origem T (0, 0) e está de face para H (1, 0). A princesa está no ponto P (4, 5).
Quantos radianos o troll tem que girar para ficar de face com a princesa?
Sabemos que podemos usar a equação (1.74) para calcular o ângulo, mas primeiro temos que
determinar o vetor TP, entre o troll e a princesa e normalizá-lo. Para obter TP subtraímos T de P,
resultando no vetor (4, 5). Para normalizar TP dividimos seus componentes pela a magnitude. Este
cálculo foi mostrado anteriormente na equação (1.62), resultando em NTP (0.62, 0.78).
Finalmente colocamos os números na equação (1.74), substituindo a equação (1.71) pelo produto
escalar.
θ = cos-1 (NTP •H)
θ = cos-1 ((0.62×1) + (0.78×0))
θ = cos-1 (0.62)
θ = 0.902 radianos
1.4.8 O Struct Vector2D
Todos os exemplos fornecidos neste livro usam o struct Vector2D. Ele é muito claro e implementa
todas as operações de vetor discutidas. Eu listei a maioria das declarações aqui para que você possa se
familiarizar com elas.
struct Vector2D
{
double x;
double y;
Vector2D():x(0.0),y(0.0){}
Vector2D(double a, double b):x(a),y(b){}
//ajusta x e y para zero
inline void Zero();
//retorna true e tanto x quanto y são zero
inline bool
isZero()const;
//retorna o comprimento (magnitude) do vetor
inline double
Length()const;
//retorna o comprimento quadrado do vetor (evitando o sqrt)
inline double
LengthSq()const;
inline void
Normalize();
//retorna o produto escalar deste vetor e de v2
inline double
Dot(const Vector2D& v2)const;
/*retorna positivo se v2 está no sentido horário deste
vetor e negativo se anti-horário (assumindo que o eixo
Y está apontando para baixo e X para a direita como numa
janela de uma aplicação)*/
inline int
Sign(const Vector2D& v2)const;
//retorna o vetor perpendicular a este
inline Vector2D Perp()const;
/*ajusta x e y para que o comprimento do vetor não
exceda max*/
inline void
Truncate(double max);
/*retorna a distância entre este vetor e um
passado como parâmetro*/
inline double
Distance(const Vector2D &v2)const;
//versão quadrada da função acima
inline double
DistanceSq(const Vector2D &v2)const;
//retorna o vetor que reverte este vetor
inline Vector2D GetReverse()const;
//precisamos de alguns operadores
const Vector2D& operator+=(const Vector2D &rhs);
const Vector2D& operator-=(const Vector2D &rhs);
const Vector2D& operator*=(const double& rhs);
const Vector2D& operator/=(const double& rhs;
bool operator==(const Vector2D& rhs)const;
bool operator!=(const Vector2D& rhs)const;
};
1.5 Espaço Local e Espaço do Mundo
É importante que você entenda a diferença entre espaço local (local space) e espaço do mundo
(world space). A representação do espaço do mundo é normalmente a que você vê renderizada na sua
tela. Cada objeto é definido por uma posição e uma orientação relativa a origem do sistema de
coordenadas do mundo (veja a Figura 1.23). Um soldado usa o espaço do mundo quando descreve a
posição de um tanque de guerra em uma grade de referência, por exemplo.
Figura 1.23: Alguns obstáculos e um veículo mostrado no espaço do mundo
O espaço local, entretanto, descreve a posição e a orientação de objetos em relação a um sistema
de coordenadas local de uma entidade em específico. Em duas dimensões, um sistema de coordenadas
local de uma entidade pode ser definido pelo vetor da frente e pelo vetor do lado (representando os eixos
locais x e y, respectivamente), com a origem posicionada no centro da entidade (para três dimensões um
vetor adicional que descreve a parte de cima é necessário). A Figura 1.24 mostra os eixos descrevendo o
sistema de coordenadas local de um veículo em forma de ponta de flecha.
Figura 1.24: O sistema de coordenadas local de um veículo
Usando este sistema de coordenadas local podemos transformar o mundo para que todos os
objetos descrevam suas posições e orientações em relação a ele (veja a Figura 1.25). Isto é apenas como
se visualizar o mundo através dos olhos da entidade. Os soldados usam o espaço local quando dizem
coisas como "Alvo a 50m às 10 horas." Eles estão descrevendo a localização do alvo em relação a suas
próprias posições e direções.
Figura 1.25: Objetos transformados no espaço local do veículo
Esta habilidade de transformar objetos entre o espaço local e do mundo pode ajudar a simplificar
muitos cálculos como você verá mais tarde neste livro. (Entretanto você precisa entender o conceito, que
está além do escopo deste livro — procure pelo capítulo sobre transformações de matrizes em um livro de
computação gráfica).
2. Física
Meu dicionário define a ciência da física como:
A ciência da matéria, da energia e das interações entre as duas.
Como um programador de IA para jogos você frequentemente trabalhará com as leis da física e
especialmente uma concerne no movimento, a qual será coberta nesta seção. Você frequentemente se
encontrará criando algoritmos para predizer onde um objeto ou agente estará no futuro, para calcular qual
é o melhor ângulo para disparar uma arma ou para qual direção e com qual força um agente deverá chutar
uma bola para passá-la a um receptor. Isto não é IA por si é claro, mas ela é toda a parte de criar a ilusão
de inteligência e é normalmente parte do trabalho do programador de IA, então você precisa saber como
isto funciona.
Vamos dar uma olhada em alguns conceitos fundamentais usados na física.
2.1 Tempo
O tempo é uma quantidade escalar (completamente especificado por sua magnitude e sem direção)
medida em segundos, abreviado por s. Até um tempo atrás, um segundo era definido em termos do giro
rotacional da Terra, mas como a rotação da Terra está diminuindo lentamente a cada ano, nos últimos 60
anos tornou-se um problema para cientistas que necessitavam de medidas cada vez mais precisas para
seus experimentos. Hoje, entretanto, um segundo é medido como:
A duração de 9.192.631.770 períodos de radiação correspondentes a transição entre os dois níveis
hiperfinos do átomo de césio 133 em seu estado de mais baixa energia.
Esta definição provê aos cientistas hoje um intervalo de tempo constante que eles necessitam para
seus experimentos precisos.
O tempo em jogos de computadores é medido em uma das duas maneiras: usando segundos (como
no mundo real) ou usando o intervalo de tempo entre as atualizações, como uma espécie de segundo
virtual. A última medida pode simplificar muitas equações, mas você deve ficar atento, isso porque, a
menos que a taxa de atualização seja fixa, a física será diferente entre máquinas de velocidades diferentes!
Entretanto, se você usar um segundo virtual, assegure-se que a frequência de atualização da física do seu
jogo seja fixa em uma taxa razoável — em geral a taxa da máquina mais lenta para a qual você está
desenvolvendo.
Nota Não são todos os jogos de computador que usam taxas de atualização fixas e com cada componente
— renderização, física, IA, etc. — sendo atualizados na mesma frequência. Muitos dos sofisticados
jogos modernos, entretanto, especificam uma taxa única para cada componente. Por exemplo, a
física pode ser atualizada a cada 30 vezes por segundo, a IA 10 vezes por segundo e a renderização
pode se permitir que faça o mais rápido que a máquina puder. Sendo assim, eu nunca me referirei a
uma "taxa de atualização" no texto, se eu não especificar um contexto, ele será o contexto do
assunto sobre o qual eu estou falando.
2.2 Distância
A unidade padrão de distância — uma quantidade escalar — é o metro, abreviado com m.
2.3 Massa
A massa é uma quantidade escalar medida em quilogramas, abreviado com kg. A massa é a
medida de quantidade de alguma coisa. Esta pode ser uma qualidade confusa de medir já que a massa de
um objeto é calculada pelo peso dele, ainda que a massa não seja uma unidade de peso; ela é uma unidade
de matéria. O peso de um objeto é a medida de quanta força gravitacional é exercida nesse objeto. Por
causa da gravidade variar de lugar para lugar (inclusive aqui na Terra), isso significa que o peso de um
objeto pode variar em diferentes lugares, entretanto a massa nunca mudará. Então como a massa pode ser
medida de forma precisa?
Os cientistas resolveram este problema criando um cilindro de liga platina-irídio que todos
aceitaram chamar de O quilograma. Este cilindro é mantido em Paris e todas as medidas são feitas em
relação a ele. Em outras palavras, você pode ir à França e fazer sua própria duplicata do quilograma, a
qual pesará exatamente o mesmo que O quilograma. Agora que você sabe que esteja onde esteja, não
interessando qual a gravidade, sua duplicata terá exatamente a mesma massa DO quilograma que está na
França. Problema resolvido.
2.4 Posição
Você pode pensar que a posição de um objeto é uma propriedade fácil de medir, mas de onde
exatamente você fará sua medida de posição? Por exemplo, se você quiser especificar a posição do seu
corpo no espaço, da onde você tomaria a medida? Poderia ser do seu pé, do seu estômago, ou da sua
cabeça? Isto apresenta um problema porque pode haver uma grande discrepância entre a posição da sua
cabeça e do seu pé.
Os físicos resolveram este problema tomando o centro de massa de objeto como sua posição. O
centro de massa de um objeto é o ponto de equilíbrio. Este é o lugar onde você pode amarrar um pedaço
imaginário de corda no objeto e pode balançar em qualquer posição. Outra maneira de imaginar o centro
de massa é que ele é a média da localização de toda a massa em um corpo.
2.5 Velocidade
A velocidade é uma quantidade vetorial (um quantidade que tem magnitude e direção) que
expressa a taxa de mudança de distância sobre o tempo. A unidade padrão de medida da velocidade é o
metro por segundo, abreviado por m/s. Isto pode ser expresso matematicamente como:
(1.75)
A letra grega maiúscula, lida como delta, é usada na matemática para denotar uma mudança de
quantidade. Assim, ∆t na equação (1.75) representa uma mudança no tempo (um intervalo de tempo) e ∆x
uma mudança na distância (um deslocamento). O ∆ é calculado como a quantidade posterior menos a
quantidade anterior. Assim, se a posição de um objeto em t = 0 é 2 (antes) e em = 1 é 5 (depois), ∆x é 5 2 = 3. Isto também pode resultar em valores negativos. Por exemplo, se a posição de um objeto no t = 0 é
7 (antes) e em t = 1 é 3 (depois), ∆x é 3 - 7 = -4.
Nota O irmão menor do delta, o delta minúsculo, escrito como δ, é usado para representar pequenas
mudanças. Você pode frequentemente o ver sendo usado em cálculos. Por causa do δ parecer a letra
d, para prevenir confusão, os matemáticos tendem a evitar usar o d para representar distância ou
deslocamento em suas equações. Em vez disso, um símbolo menos ambíguo como ∆x é usado.
Usando a equação (1.75), é fácil calcular a velocidade média de um objeto. Vamos dizer que você
precisa da velocidade média de uma bola que rola entre dois pontos. Primeiro calcule o deslocamento
entre os dois pontos, e então o divida pela quantidade de tempo levado pela bola para cobrir essa
distância. Por exemplo, se a distância entre os pontos é 5 m e o tempo levado pela bola para se deslocar
de um ponto ao outro é 2 s, então a velocidade é:
(1.76)
É também possível calcular que distância um objeto se deslocou se sabemos a velocidade média e
o tempo que o deslocamento demorou. Vamos dizer que você está dirigindo seu carro a 35 mph e gostaria
de saber que distância percorreu na última meia hora. Rearranjando a equação (1.75) temos:
(1.77)
Colocando os números temos:
(1.78)
Relacionando isto a jogos de computador, se você tem um veículo na posição P no tempo t
viajando na velocidade constante V, podemos calcular sua posição na próxima etapa da atualização (no
tempo t + 1) através de:
(1.79)
Onde V∆t representa o deslocamento entre as etapas de atualização (da equação (1.77)).
Vamos tornar isto mais claro pela demonstração de um código de exemplo. A seguir um trecho de
código para uma classe Vehicle que encapsula o movimento de um veículo viajando com velocidade
constante.
class Vehicle
{
//um vetor representando a posição no espaço
vector m_vPosition;
//um vetor representando a velocidade
vector m_vVelocity;
public:
//chamado a cada frame para atualizar a posição do veículo
void Update(float TimeElapsedSinceLastUpdate)
{
m_vPosition += m_vVelocity * TimeElapsedSinceLastUpdate;
}
};
Note que seu jogo uma taxa de atualização fixa para a física, como muito dos exemplos deste
livro, ∆t será constante e pode ser eliminado da equação. Isso resulta em um método Update simplificado
como se segue:
//atualiza a simulação usando uma atualização constante
void Vehicle::Update()
{
m_vPosition += m_vVelocity;
}
Porém lembre-se, que se você escolher eliminar o ∆t como mostrado, a unidade de tempo que
você usará em quaisquer cálculos não será mais o segundo, mas o intervalo de tempo entre as etapas de
atualização.
2.6 Aceleração
A aceleração é uma quantidade vetorial que expressa a taxa de mudança de velocidade sobre o
tempo e é medida em metros por segundo por segundo, escrito como m/s2. A aceleração pode ser expressa
matematicamente como:
(1.80)
Essa equação declara que a aceleração é equivalente a mudança de velocidade de um objeto
dividida pelo intervalo de tempo que levou para essa mudança de velocidade ocorrer.
Por exemplo, se um carro começa do repouso e acelera em 2 m/s2, então a cada segundo, são
adicionados 2 m/s em sua velocidade. Veja a Tabela 1.1.
Tabela 1.1
Tempo(s)
Velocidade(m/s)
0
0
1
2
2
4
3
6
4
8
5
10
Desenhando estes dados como velocidade versus tempo em um gráfico, temos a Figura 1.26. Se
examinarmos um intervalo de tempo, digamos o intervalo entre t = 1 e t = 4, podemos ver que a
inclinação, dada por
, é equivalente a aceleração durante o intervalo.
Figura 1.26: A velocidade do carro desenhada contra o tempo
Você aprendeu mais cedo como a equação y = mx + c define todas as linhas retas em um plano
Cartesiano 2D, onde m é a inclinação e c a interseção no eixo y. Por causa do que podemos ver na Figura
1.26, a aceleração constante é sempre desenhada como uma linha reta, então podemos usar essa a para a
aceleração de um carro. Sabemos que o eixo y representa a velocidade v, e o eixo x representa o tempo t.
Também sabemos que a inclinação m relata a aceleração. Assim a equação fica:
(1.81)
A constante u representa a velocidade de um carro no tempo t = 0, a qual pode ser vista como a
intersecção da linha no eixo y. Por exemplo, se o carro no exemplo começa com a velocidade de 3 m/s,
então o gráfico pode ser idêntico mas com um deslocamento para cima de 3 como mostrado na Figura
1.27.
Figura 1.27: O mesmo carro, mas andando com uma velocidade inicial de 3 m/s no tempo t =0
Para testar a equação vamos determinar que a velocidade inicial do carro é 3 m/s e ele acelera em
2 m/s durante 3 segundos. Colocando os números na equação (1.81) temos:
2
(1.82)
Isso é exatamente o que podemos ver no gráfico. Veja a Figura 1.28.
Figura 1.28
Outra coisa interessante sobre um gráfico velocidade-tempo, é que a área no gráfico entre os dois
tempos é equivalente a distância percorrida pelo objeto durante esse tempo. Vamos primeiro olhar um
simples exemplo. A Figura 1.29 mostra um gráfico de tempo versus velocidade para um veículo que anda
durante 2 segundos a 4 m/s e pára.
Figura 1.29
A área no gráfico (a região cinza) é dada pela altura × largura, a qual é equivalente a velocidade ×
tempo, o que como você pode ver resulta em 8 metros. Este é o mesmo resultado de usarmos a equação
∆x = v∆t.
A Figura 1.30 mostra o exemplo anterior onde o veículo acelera do repouso com uma aceleração
constante de 2 m/s2. Vamos dizer que queremos calcular a distância percorrida entre os tempos t = 1 e t
=3.
Figura 1.30
Sabemos que a distância percorrida entre t = 1 e t = 3 é a área no gráfico entre esses tempos. Como
é claramente mostrado na figura, a área é a soma das áreas do retângulo A e do triângulo B.
A área de A é dada pelo tempo de deslocamento t, multiplicado pela velocidade inicial u, o que se
escreve como:
(1.83)
A área de B, um triângulo, é metade da área do retângulo descrito pelos lados do triângulo. Os
lados do triângulo são dados pelo tempo de deslocamento t, e a diferença entre a velocidade final e a
velocidade inicial v - u. Isso pode ser escrito como:
(1.84)
Entretanto, a área total sob o gráfico entre os tempos t = 1 e t =3, a qual é equivalente a distância
percorrida, é a somo desses dois termos, sendo assim:
(1.85)
Sabemos que v - u é equivalente a mudança de velocidade v, e que apartir da equação (1.80):
(1.86)
Este valor de v - u pode ser substituído na equação (1.85), resultando na equação que nos dá a
distância apartir do tempo e da aceleração.
(1.87)
Colocando os números na equação temos:
(1.88)
Podemos também fazer outra coisa útil com essa equação: Podemos tirar o fator tempo fora para
obter uma equação que usa apenas a velocidade e a distância percorrida.
Apartir da equação (1.81) sabemos que:
(1.89)
Podemos substituir este valor pelo ∆t na equação (1.87), o que nos dá:
(1.90)
Essa equação horrível pode ser simplificada enormemente. (Se você é novato em álgebra, eu
sugiro que tente simplificar você mesmo. Se tiver dificuldades, a simplificação inteira é explicada no fim
do capítulo).
(1.91)
Essa equação é extremamente útil. Por exemplo, podemos usá-la para determinar a velocidade
final de uma bola que é solta de cima do prédio Empire State (assumindo que não há nenhuma resistência
do ar). A aceleração da queda de um objeto é a força exercida pelo campo gravitacional da Terra e é
equivalente a aproximadamente 9.8 m/s2. A velocidade inicial da bola é 0 e a altura do prédio Empire
State é 381 m. Colocando esses valores na equação temos:
(1.92)
As equações anteriores são verdadeiras para todos os objetos que se movimentam com aceleração
constante, mas é claro que é possível também que os objetos se movimentem com acelerações variadas.
Por exemplo, um avião decolando tem uma alta aceleração no início (a qual você pode sentir como uma
força o empurrando para trás do seu banco), então esta decresce quando os limites da potência do motor
são atingidos. Este tipo de aceleração parece com o que é mostrado na Figura 1.31.
Figura 1.31: Um avião acelerando durante a decolagem
Como outro exemplo, a Figura 1.32 mostra um gráfico de velocidade versus tempo para um carro
que acelera até 30 km/h, freia bruscamente para evitar atropelar um cachorro desgarrado e então acelera
de novo até 30 km/h.
Figura 1.32
Quando você tem acelerações variadas como essas, somente é possível determinar a aceleração em
um tempo em específico. Isso é obtido ao se calcular a inclinação de uma tangente à curva em um ponto.
2.7 Força
De acordo com Isaac Newton:
Uma força é uma ação exercida sobre um corpo para que este mude de estado, seja para o
repouso, ou para um movimento uniforme em linha reta.
Entretanto, a força é a qualidade que pode alterar a velocidade de um objeto ou a linha de
movimento. A força não tem nada a ver com o movimento. Por exemplo, uma flecha voando não precisa
de uma força constante sendo aplicada nela para que se mantenha voando (como pensava Aristóteles). A
força está presente onde as mudanças de movimento ocorrem, como quando a flecha é parada ou quando
um carro drag racer acelera ao longo da pista. A unidade de força é o Newton, abreviado por N, e é
definido como:
A força requerida para fazer uma massa de um quilograma mover-se do repouso até a velocidade
de um metro por segundo em um segundo.
Há dois tipos diferentes de força: forças com contato e sem contato. Forças com contato ocorrem
entre objetos que estão se tocando, como a força friccional presente entre a neve e os esquis de um
esquiador. Forças sem contato são as que ocorrem entre objetos que não estão se tocando um ao outro,
como a força gravitacional da Terra sobre seu corpo ou a força magnética da Terra sobre a agulha de uma
bússola.
É importante notar que muitas forças podem agir sobre um simples objeto simultaneamente. Se a
soma dessas forças for igual a zero, o objeto permanece em movimento com a mesma velocidade e na
mesma direção. Em outras palavras, se um objeto está parado ou se movendo em linha reta com
velocidade constante, a soma de todas as forças agindo nele deve ser zero. Se, entretanto, a soma das
forças não é igual a zero, o objeto agirá na direção da força resultante. Isso pode ser confuso,
especialmente em relação a objetos estacionários. Por exemplo, como pode haver quaisquer forças agindo
sobre uma maçã em cima de uma mesa? Além de tudo, ela não está se movendo! A resposta é que há duas
forças agindo sobre a maçã: a força da gravidade tentando puxar a maçã em direção a Terra e uma força
igual e oposta da mesa empurrando a maçã para fora da Terra. Isso é o porquê da maçã permanecer sem
movimento. A Figura 1.33 mostra exemplos de varias quantidades de forças agindo sobre objetos do
cotidiano.
Figura 1.33: da esquerda para direita e de cima para baixo — uma maçã caindo, uma maçã em repouso numa mesa, uma
bola rolando sobre uma mesa inclinada e um barco a vela na água.
Sabemos que se a soma das forças agindo sobre um objeto não é zero, uma aceleração será
adicionada na direção da força; mas quanto de aceleração? A resposta é que a quantidade de aceleração a,
é proporcional a massa do objeto m e a força total aplicada F. Esse relacionamento é dado pela equação:
(1.93)
Porém mais comumente, você verá esta equação escrita como:
(1.94)
Usando esta equação, se sabemos o quão rápido um objeto está acelerando e a sua massa, então
podemos calcular o total de força agindo nele. Por exemplo, se o barco na Figura 1.33 tem massa de 2000
kg e está acelerando a uma taxa de 1.5 m/s2, a força total agindo nele é:
Ftotal = 2000 × 1.5 = 3000 N
Usando-se as equações de força, aceleração, velocidade e posição, se sabemos quanta força está
agindo em um objeto, podemos determinar a aceleração e então atualizar a posição e a velocidade desse
objeto de acordo. Por exemplo, vamos dizer que você tem uma classe de uma espaçonave com atributos
para massa, velocidade atual e posição atual. Como esta:
class SpaceShip
{
private:
vector m_Position;
vector m_Velocity;
float m_fMass;
public:
…
};
Informando o intervalo de tempo desde a ultima atualização e a força aplicada, podemos criar um
método que atualize a posição e a velocidade da nave. Aqui como:
void SpaceShip::Update(float TimeElapsedSinceLastUpdate, float ForceOnShip)
{
float acceleration = ForceOnShip / m_fMass;
Primeiro de tudo, calculamos a aceleração apartir da força usando a equação (1.93).
m_Velocity += acceleration * TimeElapsedSinceLastUpdate;
Depois, atualizamos a velocidade a partir da aceleração usando a equação (1.80).
m_vPosition += m_Velocity * TimeElapsedSinceLastUpdate;
}
E finalmente, a posição pode ser atualizada com a velocidade atualizada usando a equação (1.77).
3. Conclusão
Este capítulo cobriu muito chão. Se muito destas coisas é nova para você, você se sentirá um
pouco confuso e até um pouco intimidado. Mas não se espante. Quando você vai lendo o livro, você verá
como cada princípio é aplicado a um problema prático. Quando você vê uma teoria no contexto do mundo
real, fica muito mais fácil entender.
3.1 Simplificação da Equação (1.90)
Deixe-me mostrar como essa equação horrível é simplificada. Aqui, novamente em toda a sua
glória.
Primeiro, vamos trabalhar o termo mais a direita. Apartir da regra mostrada na equação (1.29)
podemos mudar a equação:
Podemos agora dar uma pequena limpada no a:
Vamos agora tirar os parêntesis no termo (v - u)2 usando a regra dada na equação (1.28).
Vamos remover os outros parêntesis também.
Agora vamos tirar as partes fracionais multiplicando cada termo por 2a:
Quase pronto! Só precisamos agrupar os termos semelhantes.
2a∆x = v2 - u2
E rearranjar a equação final.
v2 = u2 2a∆x
Download