EDUARD MONTGOMERY MEIRA COSTA, D.SC. C APLICADO AO APRENDIZADO DE ELETROMAGNETISMO © !"#$%#!&'&#!!(%) * +% % ,, -% .% / 0 % 1 +23% % 414, 5, 5 6 78+ 5* , / , 923% % + / % :/9 % 23/ +23;, )2 0 * < !"#$%&' ! COSTA, Eduard Montgomery Meira. C Aplicado ao Aprendizado de Eletromagnetismo Rio de Janeiro: Editora Ciência Moderna Ltda., 2012. 1. Magnetismo e Eletromagnetismo. 2. Linguagem de Programação. I — Título ISBN: 978-85-399-0294-1 CDD 538 005.133 )$+ + ,-./0 1,1/234+5647864 #938:33487...3; <938:33487.=5. 7!$$>$+%+2 ???+$+%+24=;83 À minha família. Aos que buscam evoluir. AGRADECIMENTOS Ao Deus Criador e os Espíritos de Luz. À minha esposa e filhos. "O maior presente que Deus nos dá é a consciência. Cada um tem o livre arbítrio de fazer deste presente o que desejar." Eduard Montgomery Meira Costa PREFÁCIO A necessidade de aprender a programar se amplia a cada dia, com a evolução digital. A aplicação da programação em todas as áreas, especialmente na engenharia, é essencial, para converter problemas em uma linguagem computacional, o que facilita o aprendizado com a tradução dos problemas em algoritmos e códigos de programas, além de se obter uma ferramenta que realiza os cálculos necessários que são muito trabalhosos quando realizados via calculadoras. É de notório saber que programar facilita o aprendizado, especialmente de áreas técnicas, pois a tradução passo a passo dos problemas em um código sintetiza a consolidação da teoria. Dessa forma, conhecer a programação em uma linguagem como C, que é uma linguagem universal é de grande importância, e saber aplicá-la aos estudos cotidianos, rende duplo ganho. Este livro é dedicado a leitores curiosos que interessam em aprofundar seus estudos, tanto na área básica de computação, como a estudantes de engenharia e computação que desejam consolidar seus conhecimentos na área de eletromagnetismo, desenvolver ferramentas para solucionar seus problemas e aprender a aplicar a linguagem C para desenvolver seus próprios softwares na solução de problemas que lhes convier. Naturalmente, este livro é básico, dando uma visão direta de tópicos da teoria de eletromagnetismo e aplicação direta da linguagem C a esses problemas. Assim, é um livro para quem conhece um pouco da área de eletromagnetismo (ou pretende conhecer ou se aprofundar) e para quem já tem alguma base na programação. De toda forma, na bibliografia deste livro são apresentados alguns títulos para dar bases ao conteúdo deste livro, para quem ainda não tem muita segurança nessas áreas. Deve-se ter em mente que na atualidade, a programação é uma das áreas mais necessárias, necessitando que técnicos, graduandos e graduados nas áreas de computação e engenharia conheçam e saibam aplicar as linguagens de programação aos problemas do cotidiano, para solucioná-los. X C - APLICADO AO APRENDIZADO DE ELETROMAGNETISMO Como este livro é básico, os programas são feitos utilizando, muitas vezes, formas primitivas, direcionando os estudantes a modificarem os programas por meio dos exercícios propostos, de forma a melhorá-los, ampliá-los e torná-los mais profissionais, consolidando seus conhecimentos na arte de programação aplicada e na teoria de eletromagnetismo. Eduard Montgomery Meira Costa D.Sc. Eng. Elétrica SUMÁRIO CAPÍTULO 1 - CARGAS ELÉTRICAS, LEI DE COULOMB E CAMPO ELÉTRICO ...... 1 1.1 Cargas Elétricas .................................................................................. 1 1.1.1 Entendendo o Programa CARGA.C ........................................ 8 1.2 Lei de Coulomb ................................................................................ 14 1.2.1 Entendendo o Programa COULOMB.C ................................ 19 1.3 Campo Elétrico ................................................................................. 22 1.3.1 Entendendo o Programa CAMPO.C ...................................... 34 1.4 Exercícios .......................................................................................... 44 CAPÍTULO 2 - LEI DE GAUSS, FLUXO ELÉTRICO E DENSIDADE DE FLUXO ELÉTRICO ...................................................................................................... 45 2.1 Fluxo Elétrico, Densidade de Fluxo Elétrico e Lei de Gauss ...... 45 2.1.1 Entendendo o Programa Fluxo.C ........................................... 64 2.2 Divergente, Operador Nabla e Teorema da Divergência ............ 76 2.2.1 Entendendo o Programa DIV.C .............................................. 89 2.3 Exercícios .......................................................................................... 99 CAPÍTULO 3 - POTENCIAL E ENERGIA NO CAMPO ELÉTRICO ........................ 101 3.1 Trabalho de uma Carga em Movimento e Potencial Elétrico ... 3.1.1 Entendendo o Programa WV.C ........................................... 3.2 Gradiente do Potencial Elétrico ................................................... 3.2.1 Entendendo o Programa GRAD.C ...................................... 3.3 Campos do Dipolo Elétrico .......................................................... 3.3.1 Entendendo o Programa DIPOLO.C .................................. 3.4 Energia no Campo Eletrostático .................................................. 3.4.1 Entendendo o Programa ENERGIA.C ............................... 3.5 Exercícios ....................................................................................... CAPÍTULO 4 - MATERIAIS ELÉTRICOS E 101 106 110 118 125 130 133 137 140 PROPRIEDADES ............................... 143 4.1 Corrente, Densidade de Corrente e Continuidade da Corrente 4.1.1 Entendendo o Programa CORRENTES.C.......................... 4.2 Condutores: Propriedades e Condições de Contorno ............... 4.2.1 Entendendo o Programa CONDUTOR.C .......................... 4.3 Semicondutores ............................................................................. 143 151 156 163 167 XII C - APLICADO AO APRENDIZADO DE ELETROMAGNETISMO 4.3.1 Entendendo o Programa SEMICOND.C ............................ 4.4 Dielétricos: Propriedades e Condições de Contorno ................. 4.4.1 Entendendo o Programa DIELETRICO.C ......................... 4.5 Capacitância ................................................................................... 4.5.1 Entendendo o Programa CAPACITOR.C ........................... 4.6 Exercícios ....................................................................................... CAPÍTULO 5 - EQUAÇÕES DE POISSON E 174 177 198 212 220 224 LAPLACE ....................................... 229 5.1 A Equação de Poisson e a Equação de Laplace ........................ 229 5.1.1 Entendendo o Programa LAPLACE.C ............................... 236 5.2 Exercícios ....................................................................................... 239 CAPÍTULO 6 - CAMPO MAGNÉTICO ............................................................. 241 6.1 A Lei de Biot-Savart e a Lei Circuital de Ampère ..................... 6.1.1 Entendendo o Programa MAGNETICO.C ......................... 6.2 Rotacional e Teorema de Stokes .................................................. 6.2.1 Entendendo o Programa ROT.C .......................................... 6.3 Fluxo Magnético e Densidade de Fluxo Magnético ................. 6.3.1 Entendendo o Programa FLUXOB.C ................................. 6.4 Potencial Escalar e Potencial Vetor Magnéticos ......................... 6.4.1 Entendendo o Programa VM.C ........................................... 6.5 Exercícios ....................................................................................... 241 247 252 264 268 274 276 283 287 CAPÍTULO 7 - FORÇA E ENERGIA NO CAMPO MAGNÉTICO ............................ 291 7.1 Forças nos Campos Magnéticos .................................................. 7.1.1 Entendendo o Programa FQB.C .......................................... 7.2 Torque nos Circuitos Fechados .................................................... 7.2.1 Entendendo o Programa TORQUE.C ................................. 7.3 Energia nos Campos Magnéticos ................................................ 7.3.1 Entendendo o Programa WB.C ........................................... 7.4 Indutâncias ..................................................................................... 7.4.1 Entendendo o Programa INDUT.C ..................................... 7.5 Exercícios ....................................................................................... 291 304 311 315 319 321 324 331 335 CAPÍTULO 8 - MATERIAIS MAGNÉTICOS, PROPRIEDADES E CIRCUITOS MAGNÉTICOS .............................................................................................. 337 8.1 Materiais Magnéticos .................................................................... 8.1.1 Entendendo o Programa CONTB.C.................................... 8.2 Circuitos Magnéticos ..................................................................... 8.2.1 Entendendo o Programa CIRCB.C ..................................... 337 357 373 382 SUMÁRIO 8.3 Força e Energia Potencial em Circuitos Magnéticos ................. Considerações sobre Indutâncias com Núcleos Ferromagnéticos .............................................................. 8.3.1 Entendendo o Programa FVB.C .......................................... 8.4 Exercícios ....................................................................................... XIII 386 388 391 394 CAPÍTULO 9 - EQUAÇÕES DE MAXWEEL E OS CAMPOS VARIANTES NO TEMPO 397 9.1 A Lei de Faraday ........................................................................... 9.1.1 Entendendo o Programa FARADAY.C ............................... 9.2 Corrente de Deslocamento ........................................................... 9.2.1 Entendendo o Programa DESLOC.C .................................. 9.3 Variações nos Campos Potenciais ................................................ 9.3.1 Entendendo o Programa VARPOT.C .................................. 9.4 Exercícios ....................................................................................... 397 405 407 422 435 442 447 CAPÍTULO 10 - ONDAS ELETROMAGNÉTICAS ............................................... 449 10.1 Ondas Eletromagnéticas ............................................................. 449 10.1.1 Entendendo o Programa ONDAS.C ................................. 462 10.2 Vetor de Poynting ........................................................................ 464 10.2.1 Entendendo o Programa POYNTING.C .......................... 469 10.3 Ondas Eletromagnéticas em Bons Condutores e Efeito Pelicular 470 10.3.1 Entendendo o Programa PELICULAR.C ......................... 479 10.4 Reflexão e Transmissão de Ondas Eletromagnéticas e Coeficiente de Onda Estacionária.................................................................. 482 10.4.1 Entendendo o Programa REFTRANS.C .......................... 495 10.5 Exercícios ..................................................................................... 498 CARGAS CAPÍTULO 1 ELÉTRICAS, LEI DE COULOMB E CAMPO ELÉTRICO Neste capítulo são apresentados os conceitos de carga elétrica, Lei de Coulomb e campo elétrico de várias distribuições de cargas. Para isto, uma apresentação básica da teoria é realizada para o entendimento dos programas e com isto, o estudante conhecer como aprofundar a aplicação desta linguagem de programação a estes conceitos, podendo assim, solucionar problemas que envolvam estas leis e teoremas. 1.1 CARGAS ELÉTRICAS O conceito de carga elétrica é uma propriedade física que determina algumas das interações eletromagnéticas da matéria. As cargas elétricas são concebidas em dois tipos: positivas e negativas. Todas as cargas elétricas são baseadas na carga fundamental (ou carga elementar) que é o elétron (negativa), tendo a carga elétrica positiva fundamental como sendo o próton. O elétron tem como carga o valor de e = - 1,6 x 10-19 C (Coulomb), Todas as cargas são múltiplas desta carga elementar. O elétron tem massa me = 9,11 x 10-31 kg. Quando várias cargas se encontram distribuídas em uma região, denominam-se de densidades de cargas, relativas a estas distribuições, as quais podem ser descritas como: Densidade linear de carga: Densidade superficial de carga: L [C/m]; S [C/m2]; 2 C - APLICADO AO APRENDIZADO DE ELETROMAGNETISMO [C/m3], Densidade volumétrica de carga: em que o valor total da carga é a soma de toda a carga distribuída, respectivamente: ³ U L dL; Q ³S U S dS ; Q ³vol Udv. Q Se as cargas são distribuídas uniformemente na região ( L, S ou constantes), tem-se Q= LL, Q= SS e Q= v, respectivamente. Caso contrário, é necessário resolver as integrais em suas respectivas coordenadas: Cartesianas: Q Q ³ U dx; ³³ U dxdy; ³³³ Udxdydz L S Q Q Q ³ U dy; ³³ U dxdz; ³ U dz; ³³ U dydz; . Q L L Q S S Cilíndricas: Q Q Q ³ U dr; L ³³ U rdrdI ; ³³³ UrdrdIdz S Q Q ³ U rdI ; ³³ U rdIdz; L S Q Q ³ U dz; ³³ U drdz; . L S Esféricas: Q Q Q ³ U dr; L ³³ U rsenTdrdI ; ³³³ Ur senTdrdIdT S 2 Q Q ³ U rsenTdI ; ³³ U rdrdT ; Q L S Q ³ U rdT ; L ³³ U r senTdIdT ; . 2 S CAPÍTULO 1 – CARGAS ELÉTRICAS, LEI DE COULOMB E CAMPO ELÉTRICO 3 Naturalmente, para se determinar o valor total de uma carga em uma distribuição qualquer, calcula-se a integral conforme definida em seus limites determinados. O cálculo de uma integral de uma variável (as três primeiras em cada descrição de coordenadas citada) pode ser realizado computacionalmente entre os limites de uma simples, dividindo-se o total da diferença entre os limites em um passo definido pequeno, em que se multiplica a função no ponto inicial por este valor do passo, somando-se ao novo valor da função no ponto posterior (ponto inicial somado do passo) multiplicado pelo valor do passo, repetindo-se até o último ponto anterior ao final. Dessa forma, calcula-se uma integral de uma única variável. Essa forma pode ser vista na Figura 1.1. Figura 1.1: Divisão de uma curva qualquer em passos de largura x = f(x1) – f(x0) para o cálculo de uma integral de uma única variável. Quanto menor o valor do passo x, mais correto o valor da integral que é a área sob a curva. Para o cálculo de uma integral de duas variáveis (as três segundas de cada descrição dada nas respectivas coordenadas), realiza-se o mesmo procedimento anterior (integral de uma variável), mas gerando dois laços: um para cada variável. Assim, determinam-se dois passos (um para cada variável) através da divisão do total entre os limites, multiplica-se o valor da função por um passo de uma das variáveis, mantendo-se a outra variável no ponto fixo, realizando-se o procedimento da integral de uma variável. Depois, incrementa-se o passo da segunda variável e repete-se o procedimento para a primeira variável, somando-se os resultados. Repete se este procedimento até que a segunda variável atinja o limite superior. Este procedimento pode ser visto na Figura 1.2. 4 C - APLICADO AO APRENDIZADO DE ELETROMAGNETISMO Figura 1.2: Divisão de uma superfície qualquer em quadrados de área x y para o cálculo de uma integral de duas variáveis: quanto menor o passo mais próximo o valor da área calculada com o valor real. Para o cálculo da integral tripla, o mesmo procedimento é realizado, incluindo-se a terceira variável. Pode-se ver a divisão de um volume como pequenos cubos de volumes definidos, cuja soma total dos pequenos volumes determina o valor numérico da integral tripla de forma computacional. Observe que o preenchimento de um vaso com pequenas caixas cúbicas apresenta muitos vazios e a soma do total dos volumes das pequenas caixas determina um erro grande em relação ao volume real do vaso (o passo é grande), enquanto o preenchimento com grãos de areia (sabendo quantos grãos e qual o volume de cada grão de areia) determina com mais certeza o volume do vaso (quando os passos em x, y e z tendem a zero, o valor numérico tende ao valor da integral corretamente). Deve se observar que, em ambos os casos, o valor numérico é tão mais próximo do valor real, quanto menor for o valor do passo, o que determina também, maior tempo no processamento do resultado. Considerando essas informações, a seguir é apresentado um programa que calcula o valor de uma carga distribuída em coordenadas cartesianas, de acordo com funções pré-definidas ou quando é uniformemente distribuída. Neste caso, sempre que se deseja calcular uma carga com uma distribuição não uniforme, deve-se colocar as funções destas distribuições nas linhas de comandos #define no início do programa. CAPÍTULO 1 – CARGAS ELÉTRICAS, LEI DE COULOMB E CAMPO ELÉTRICO 5 ———————————— Programa CARGA.C ———————————— #include <stdio.h> #include <conio.h> #include <math.h> #define funcao1var 2*cont1*cont1+3*cont1+1 #define funcao2var 3*cont1*cont2+3*cont1+2*cont2 #define funcao3var cont1*cont3+2*cont2-cont1+cont3*cont2 int item, dados = 0;; char tipo_q[2], equ[2]; double delta = 1e-2, carga = 0, val_carga = 0, coord1inf = 0, coord1sup = 0, coord2inf = 0, coord2sup = 0, coord3inf = 0, coord3sup = 0; void menu (void); void dadosin (void); void ccarga(void); void main(){ clrscr(); do{ menu(); switch(item){ case 1: dadosin(); break; case 2: if (!dados){ printf(“\nNão houve entrada de dados!\n”); printf(“Pressione uma tecla!”); while(!kbhit()); } else{ ccarga(); printf(“\nCarga total na região definida: %lf C\n”, carga); printf(“Pressione uma tecla!”); while(!kbhit()); } break; 6 C - APLICADO AO APRENDIZADO DE ELETROMAGNETISMO case 0: break; } }while (item != 0); } void menu(void){ do{ clrscr(); printf(“\n(0) - Sai”); printf(“\n(1) - Entrada de dados”); printf(“\n(2) - Calcular carga total\n\n->”); scanf(“%d”, &item); if((item > 2) || (item < 0)){ printf(“Inválido! Pressione uma tecla!”); while(!kbhit()); } }while((item < 0) || (item > 2)); } void dadosin(void){ clrscr(); printf(“\nEntre com o valor da carga (ou qualquer número se depender das funções definidas): “); scanf(“%lf”, &val_carga); equ[1] = ‘\0’; do{ printf(“\nÉ uma carga distribuída uniformemente? (s/n)”); scanf(“%s”, &equ); }while ((equ[0] != ‘s’) && (equ[0] != ‘n’)); do{ printf(“\nÉ uma carga distribuída (l)inearmente, (s)uperficialmente ou (v)olumetricamente?: “); scanf(“%s”, &tipo_q); }while ((tipo_q[0] != ‘l’) && (tipo_q[0] != ‘s’) && (tipo_q[0] != ‘v’)); clrscr(); printf(“\nEntre com os limites da primeira coordenada (inferior /superior) separados por espaço: “); scanf(“%lf”, &coord1inf); scanf(“%lf”, &coord1sup); if(tipo_q[0] != ‘l’){ printf(“\nEntre com os limites da segunda coordenada (inferior/superior) separados por espaço: “); CAPÍTULO 1 – CARGAS ELÉTRICAS, LEI DE COULOMB E CAMPO ELÉTRICO scanf(“%lf”, &coord2inf); scanf(“%lf”, &coord2sup); } if(tipo_q[0] == ‘v’){ printf(“\nEntre com os limites da terceira coordenada (inferior/superior) separados por espaço: “); scanf(“%lf”, &coord3inf); scanf(“%lf”, &coord3sup); } printf(“\nOs valores de delta são definidos como 1e-2. Digite seu novo valor: “); scanf(“%f”, &delta); printf(“\nDados completos! Pressione uma tecla...”); while(!kbhit()); dados = 1; } void ccarga(void){ double cont1 = coord1inf, cont2 = coord2inf, cont3 = coord3inf, func1, func2, func3, total, cont; if(tipo_q[0] == ‘l’) total = (coord1sup - coord1inf)/delta; else if(tipo_q[0] == ‘s’) total = (coord1sup coord1inf)*(coord2sup - coord2inf)/(delta*delta); else if(tipo_q[0] == ‘v’) total = (coord1sup coord1inf)*(coord2sup - coord2inf)*(coord3sup coord3inf)/(delta*delta*delta); if (equ[0] == ‘s’){ carga = val_carga *(coord1sup - coord1inf); if (tipo_q[0] != ‘l’) carga = carga *(coord2sup - coord2inf); if (tipo_q[0] == ‘v’) carga = carga *(coord3sup - coord3inf); } else{ carga = 0; cont = 0; do{ if (tipo_q[0] == ‘l’) { func1 = funcao1var; carga = carga + func1*delta; } else if (tipo_q[0] == ‘s’) { func2 = funcao2var; carga = carga + func2*delta*delta; } 7 8 C - APLICADO AO APRENDIZADO DE ELETROMAGNETISMO else if (tipo_q[0] == ‘v’) { func3 = funcao3var; carga = carga + func3*delta*delta*delta; } cont1+=delta; if(cont1 >= coord1sup){ cont1 = coord1inf; if ((tipo_q[0] != ‘l’)&&(cont1 < coord1sup)){ cont2+=delta; if(cont2 >= coord2sup){ cont2 = coord2inf; if ((tipo_q[0] == ‘v’)&&(cont2 < coord2sup)) cont3+=delta; } } } cont+=1; }while(cont < total); } } 1.1.1 Entendendo o Programa CARGA.C Este programa cria um menu básico em que se pode entrar com os dados e também calcular o valor de uma carga em coordenadas cartesianas tanto na condição de uma carga uniformemente distribuída, como uma carga distribuída de acordo com equações pré-definidas: distribuição linear, distribuição superficial e distribuição volumétrica. Como todo programa, a inclusão das bibliotecas é necessária, que neste caso, são as de trabalho com strings e matemática. #include <stdio.h> #include <conio.h> #include <math.h> Com essa inclusão, entram-se as definições das constantes com as funções de uma variável, duas variáveis e três variáveis, respectivamente, as quais são utilizadas caso o usuário deseje calcular uma carga distribuída linearmente, superficialmente ou volumetricamente. Estas funções definidas podem ser modificadas para que o programa calcule cargas totais distribuídas de outras formas, que não estas funções. CAPÍTULO 1 – CARGAS ELÉTRICAS, LEI DE COULOMB E CAMPO ELÉTRICO 9 #define funcao1var 2*cont1*cont1+3*cont1+1 #define funcao2var 3*cont1*cont2+3*cont1+2*cont2 #define funcao3var cont1*cont3+2*cont2-cont1+cont3*cont2 No caso destas funções pré-definidas, essas expressam as equações: 2 x 2 3x 1 3xy 3 x 2 y xz 2 y x zy considerando que x = cont1; y = cont2 e z = cont3. As variáveis definidas como tipo int são utilizadas como controle de fluxo do programa, na escolha de itens do menu e na verificação de entrada de dados. As variáveis do tipo char são utilizadas para controle de fluxo da entrada de dados e cálculo dos valores finais da carga. As variáveis tipo double são as definidas para valor de passo, cálculo da carga e limites inferior e superior das coordenadas. Para o programa ser bem organizado, três funções são definidas, que são: void menu (void); void dadosin (void); void ccarga(void); as quais abrem o menu, entra com os dados e calcula a carga total, respectivamente. A função main é utilizada para limpar a tela, chamar a função menu, processar os dados do programa e sair do programa. No processamento dos dados após a escolha de um item do menu, o comando switch...case avalia e direciona o programa para entrar os dados: case 1: dadosin(); break; para apresentar os resultados, caso os dados já tenham sido inseridos (valor da variável dados igual a 1), através da chamada à função ccarga: 10 C - APLICADO AO APRENDIZADO DE ELETROMAGNETISMO case 2: if (!dados){ printf(“\nNão houve entrada de dados!\n”); printf(“Pressione uma tecla!”); while(!kbhit()); } else{ ccarga(); printf(“\nCarga total na região definida: %lf C\n”, carga); printf(“Pressione uma tecla!”); while(!kbhit()); } break; e fechar o programa: case 0: break; } Este procedimento é repetido até que o usuário digite o valor 0 (zero) no menu, desde que o switch...case está dentro de um laço do...while. A função menu apresenta na tela os itens a serem escolhidos, e solicita que o usuário digite um deles. Caso o usuário digite um valor invalido, é apresentada a mensagem “Inválido! Pressione uma tecla!” e a tela é limpa após esse pressionamento, reapresentando o menu. void menu(void){ do{ clrscr(); printf(“\n(0) - Sai”); printf(“\n(1) - Entrada de dados”); printf(“\n(2) - Calcular carga total\n\n->”); scanf(“%d”, &item); if((item > 2) || (item < 0)){ printf(“Inválido! Pressione uma tecla!”); while(!kbhit()); } }while((item < 0) || (item > 2)); } CAPÍTULO 1 – CARGAS ELÉTRICAS, LEI DE COULOMB E CAMPO ELÉTRICO 11 A função dadosin solicita a entrada dos dados, em que na primeira pergunta, o usuário deve entrar com o valor da carga distribuída, caso ela seja uniforme. Se a carga estiver distribuída de modo não uniforme, qualquer valor numérico pode ser colocado, como por exemplo, 0 (zero). printf(“\nEntre com o valor da carga (ou qualquer número se depender das funções definidas): “); scanf(“%lf”, &val_carga); Essa condição é realizada na segunda pergunta do programa, que determina o valor da variável equ, a qual é utilizada no calculo da carga na função ccarga, de acordo com seu valor. Como está dentro de um laço do...while, o programa repete a pergunta até que seja digitado um ‘s’ ou um ‘n’. do{ printf(“\nÉ uma carga distribuída uniformemente? (s/n)”); scanf(“%s”, &equ); }while ((equ[0] != ‘s’) && (equ[0] != ‘n’)); Da mesma forma, a terceira pergunta se procede, de modo que o usuário pode digitar as letras ‘l’, ‘s’ ou ‘v’, que representam, respectivamente, a distribuição das cargas de forma linear, superficial ou volumétrica. do{ printf(“\nÉ uma carga distribuída (l)inearmente, (s)uperficialmente ou (v)olumetricamente?: “); scanf(“%s”, &tipo_q); }while ((tipo_q[0] != ‘l’) && (tipo_q[0] != ‘s’) && (tipo_q[0] != ‘v’)); Após essa entrada, o programa limpa a tela via função clrscr() e solicita os limites inferior e superior das coordenadas, de acordo com o tipo de distribuição definida: printf(“\nEntre com os limites da primeira coordenada (inferior/superior) separados por espaço: “); scanf(“%lf”, &coord1inf); scanf(“%lf”, &coord1sup); if(tipo_q[0] != ‘l’){ 12 C - APLICADO AO APRENDIZADO DE ELETROMAGNETISMO printf(“\nEntre com os limites da segunda coordenada (inferior/superior) separados por espaço: “); scanf(“%lf”, &coord2inf); scanf(“%lf”, &coord2sup); } if(tipo_q[0] == ‘v’){ printf(“\nEntre com os limites da terceira coordenada (inferior/superior) separados por espaço: “); scanf(“%lf”, &coord3inf); scanf(“%lf”, &coord3sup); } Finalmente, o programa pede um novo valor para a variável delta (passo de integração) e aguarda que o usuário pressione uma tecla para voltar ao menu, dando o valor 1 à variável de controle dados. printf(“\nOs valores de delta são definidos como 1e-2. Digite seu novo valor: “); scanf(“%f”, &delta); printf(“\nDados completos! Pressione uma tecla...”); while(!kbhit()); dados = 1; Na função ccarga, a carga é calculada de acordo com os dados que foram inseridos. As variáveis locais cont1, cont2 e cont3 recebem os valores dos limites inferiores das coordenadas, para começar o procedimento de cálculo. Observe que essas variáveis são definidas com os mesmos nomes das variáveis dentro das funções constantes nas definições no início do programa. As demais variáveis locais são criadas para receber os valores das funções em cada ponto (a cada passo) e controle do laço. double cont1 = coord1inf, cont2 = coord2inf, cont3 = coord3inf, func1, func2, func3, total, cont; Conforme definida a distribuição da carga, os comandos condicionais calculam primeiramente o número total de passos a serem utilizados para o cálculo da integral da carga, caso ela não seja distribuída uniformemente: if(tipo_q[0] == ‘l’) total = (coord1sup - coord1inf)/delta; else if(tipo_q[0] == ‘s’) total = (coord1sup coord1inf)*(coord2sup - coord2inf)/(delta*delta); CAPÍTULO 1 – CARGAS ELÉTRICAS, LEI DE COULOMB E CAMPO ELÉTRICO 13 else if(tipo_q[0] == ‘v’) total = (coord1sup coord1inf)*(coord2sup - coord2inf)*(coord3sup coord3inf)/(delta*delta*delta); Caso a carga seja distribuída uniformemente, é calculado o valor da carga através da multiplicação direta do valor da carga multiplicado pelo comprimento da linha (caso seja uma distribuição linear), pela área (caso seja superficial) ou pelo volume (caso seja volumétrica): if (equ[0] == ‘s’){ carga = val_carga *(coord1sup - coord1inf); if (tipo_q[0] != ‘l’) carga = carga *(coord2sup - coord2inf); if (tipo_q[0] == ‘v’) carga = carga *(coord3sup - coord3inf); } Se a carga não é distribuída de modo não uniforme, é calculado o valor aproximado da integral de acordo com o passo definido (variável delta) através das linhas de código: else{ carga = 0; cont = 0; do{ if (tipo_q[0] == ‘l’) { func1 = funcao1var; carga = carga + func1*delta; } else if (tipo_q[0] == ‘s’) { func2 = funcao2var; carga = carga + func2*delta*delta; } else if (tipo_q[0] == ‘v’) { func3 = funcao3var; carga = carga + func3*delta*delta*delta; } O controle do laço é realizado com a variação de cada uma das variáveis que são somadas passo a passo. Primeiro a primeira coordenada é somada até alcançar o limite superior. Quando atinge esse valor, essa volta ao valor do limite inferior e incrementa de delta a segunda coordenada. Repete-se 14 C - APLICADO AO APRENDIZADO DE ELETROMAGNETISMO isso, até que a segunda coordenada atinja o limite superior, quando a terceira coordenada é incrementada, e assim por diante. Naturalmente, como a carga pode não estar definida como superficial ou volumétrica, esses comandos condicionais testam a variável tipo_q, para verificar se pode incrementar a segunda ou terceira coordenadas. cont1+=delta; if(cont1 >= coord1sup){ cont1 = coord1inf; if ((tipo_q[0] != ‘l’)&&(cont1 < coord1sup)){ cont2+=delta; if(cont2 >= coord2sup){ cont2 = coord2inf; if ((tipo_q[0] == ‘v’)&&(cont2 < coord2sup)) cont3+=delta; } } } Por fim, o programa incrementa a variável cont e verifica se ela atingiu o valor total de passos definidos para o cálculo da integral. cont+=1; }while(cont < total); 1.2 LEI DE COULOMB A lei de Coulomb determina a força existente entre cargas elétricas. Esta força pode ser de atração (quando as cargas envolvidas são de mesmo sinal) ou de repulsão (quando as cargas apresentam sinais contrários). Seu valor é um vetor dirigido de uma carga para outra, podendo ser a componente resultante da interação entre várias forças geradas por várias cargas sobre uma outra carga. A lei de Coulomb determina que o módulo da força entre duas cargas Q1 e Q2 é: F Q1Q2 4SH 0 R 2 [N] CAPÍTULO 1 – CARGAS ELÉTRICAS, LEI DE COULOMB E CAMPO ELÉTRICO 15 em que R é a distância entre as cargas e H0 8,854 u 10 12 F / m # 1 u 10 9 F / m 36S é a permissividade do espaço livre, cuja unidade é o Farad/metro (F/m). Em termos vetoriais, a força que uma carga Q1 exerce sobre outra carga Q2 é: F12 Q1Q2 2 4SH 0 R12 a R12 em que a direção da força é dada pelo vetor unitário (ou versor) a R12 R12 R12 ( x2 x1 )a x ( y2 y1 )a y ( z 2 z1 )a z ( x2 x1 ) 2 ( y2 y1 ) 2 ( z 2 z1 ) 2 com os versores a x , a y e a z sendo os versores que dão as direções dos eixos coordenados x, y e z, respectivamente. O exemplo desta força, para o caso de duas cargas de mesmo sinal, pode ser visto na Figura 1.3. Figura 1.3: Forças de Coulomb entre duas cargas elétricas. 16 C - APLICADO AO APRENDIZADO DE ELETROMAGNETISMO A força resultante que várias cargas Q1, Q2, ..., Qn, exercem sobre uma carga Q, é definida pelo somatório vetorial das forças: FR n Q i 1 4SH 0 ¦ Fi n ¦ Qi 2 i 1 RiQ a RiQ . Uma força de Coulomb resultante de três cargas sobre uma carga Q pode ser vista na Figura 1.4. Figura 1.4: Força resultante sobre a carga Q devido a três cargas próximas. Considerando essas informações, a seguir é apresentado um programa que calcula o valor da força exercida sobre uma carga Q provinda de uma carga ou conjunto de cargas, apresentando seu resultado tanto em magnitude, como na forma vetorial. ———————————— Programa COULOMB.C ———————————— #include <stdio.h> #include <conio.h> #include <math.h> int item, dados = 0, totalq; float coordsq[30][3], coordsQ[3]; CAPÍTULO 1 – CARGAS ELÉTRICAS, LEI DE COULOMB E CAMPO ELÉTRICO 17 double carga[30], Q, Fr, Fvr[3], fvr[30][3], fr[30]; void menu (void); void dadosin (void); void cforca(void); void main(){ int k; clrscr(); do{ menu(); switch(item){ case 1: dadosin(); break; case 2: if (!dados){ printf(“\nNão houve entrada de dados!\n”); printf(“Pressione uma tecla!”); while(!kbhit()); } else{ cforca(); printf(“\nForças sobre a carga Q por carga:\n”); for(k = 0; k < totalq; k++) printf(“Carga q(%d): Fvet = %eax + (%e)ay + (%e)az [N]; Fmod = %e[N]\n”, k, fvr[k][0], fvr[k][1], fvr[k][2], fr[k]); printf(“\nForça total sobre a carga Q:\n”); printf(“Frvet = %eax + (%e)ay + (%e)az [N]; Frmod = %e[N]\n”, Fvr[0], Fvr[1], Fvr[2], Fr); printf(“Pressione uma tecla!”); while(!kbhit()); } break; case 0: break; } }while (item != 0); } void menu(void){ do{ clrscr(); printf(“\n(0) - Sai”); printf(“\n(1) - Entrada de dados”); 18 C - APLICADO AO APRENDIZADO DE ELETROMAGNETISMO printf(“\n(2) - Calcular forças\n\n->”); scanf(“%d”, &item); if((item > 2) || (item < 0)){ printf(“Inválido! Pressione uma tecla!”); while(!kbhit()); } }while((item < 0) || (item > 2)); } void dadosin(void){ int x; clrscr(); printf(“\nEntre com o valor da carga de teste Q: “); scanf(“%lf”, &Q); printf(“\nEntre com a localização da carga Q (x, y, z sepa radas por espaços):”); for(x = 0; x < 3; x++) scanf(“%f”, &coordsQ[x]); printf(“Quantas cargas agem sobre a carga Q = %e? “, Q); scanf(“%d”, &totalq); x = 0; do{ printf(“\nEntre com o valor da carga q(%d):”, x+1); scanf(“%lf”, &carga[x]); printf(“\nEntre com a localização da carga q(%d) (x, y, z separadas por espaços):”, x+1); scanf(“%f”, &coordsq[x][0]); scanf(“%f”, &coordsq[x][1]); scanf(“%f”, &coordsq[x][2]); x++; }while (x < totalq); printf(“\nDados completos! Pressione uma tecla...”); while(!kbhit()); dados = 1; } void cforca(void){ int cont = 0; float r; do{ r = sqrt(pow(coordsQ[0] - coordsq[cont][0],2) + pow(coordsQ[1] - coordsq[cont][1],2) + pow(coordsQ[2] coordsq[cont][2],2)); fvr[cont][0] = 9e9*carga[cont]*Q*(coordsQ[0]coordsq[cont][0])/pow(r,3); CAPÍTULO 1 – CARGAS ELÉTRICAS, LEI DE COULOMB E CAMPO ELÉTRICO 19 fvr[cont][1] = 9e9*carga[cont]*Q*(coordsQ[1]coordsq[cont][1])/pow(r,3); fvr[cont][2] = 9e9*carga[cont]*Q*(coordsQ[2]coordsq[cont][2])/pow(r,3); fr[cont]=sqrt(pow(fvr[cont][0],2) + pow(fvr[cont][1],2) + pow(fvr[cont][2],2)); cont++; }while(cont < totalq); cont = 0; Fvr[0] = 0; Fvr[1] = 0; Fvr[2] = 0; do{ Fvr[0]+= fvr[cont][0]; Fvr[1]+= fvr[cont][1]; Fvr[2]+= fvr[cont][2]; cont++; }while(cont < totalq); Fr = sqrt(pow(Fvr[0],2) + pow(Fvr[1],2) + pow(Fvr[2],2)); } 1.2.1 Entendendo o Programa COULOMB.C Da mesma forma que o programa CARGA.C, este programa gera um menu principal, onde se determina se deseja entrar com dados, calcular as forças ou sair do programa. O cálculo das forças determina a força vetorial e sua magnitude para cada carga atuando sobre uma carga de teste Q, e também a força total resultante gerada por todas as cargas em conjunto sobre esta carga de teste Q, na forma vetorial e sua magnitude, as quais são apresentadas ao ser chamada a função cforca() no menu principal. Como todo programa, são incluídas as bibliotecas das funções utilizadas. Neste caso, são as mesmas do programa CARGA.C. #include <stdio.h> #include <conio.h> #include <math.h> As variáveis globais deste programa são as inteiras (tipo int) que definem o fluxo dos dados no menu e o número total de cargas que exercem força sobre a carga de teste Q, que é a variável totalq; tipo float tem as variáveis coordsq e coordsQ, que guardam as posições x, y e z de 20 C - APLICADO AO APRENDIZADO DE ELETROMAGNETISMO cada carga q e da carga de teste Q e, tipo double encontram-se as variáveis carga, responsável por guardar os valores das cargas q podendo ter até trinta cargas, Q que guarda o valor da carga de teste Q, Fr responsável por guardar o valor da magnitude da força resultante de todas as cargas q sobre a carga Q, Fvr que guarda o valor vetorial da roça resultante de todas as cargas q sobre a carga Q, fvr que guarda o valor vetorial de cada carga q sobre a carga Q e fr que guarda o valor da magnitude de cada carga q sobre a carga Q. Os protótipos das funções são: menu (responsável pela apresentação do menu e direcionamento do fluxo de informações do programa), dadosin (responsável pela entrada de dados) e cforca (responsável pelo cálculo das forças individuais das cargas e da resultante final, tanto na forma vetorial como a magnitude destas). A função main, trabalha da mesma forma que no programa CARGA.C, chamando o menu, direcionando o programa para receber os dados, apresentando os resultados e saindo do programa. Neste caso, a apresentação dos resultados, quando há entrada de dados, o programa apresenta para cada carga a força vetorial exercida sobre a carga de teste Q, juntamente com sua magnitude, e a força resultante vetorial de todas as cargas sobre a carga de teste Q juntamente com sua magnitude. cforca(); printf(“\nForças sobre a carga Q por carga:\n”); for(k = 0; k < totalq; k++) printf(“Carga q(%d): Fvet = %eax + (%e)ay + (%e)az [N]; Fmod = %e[N]\n”, k, fvr[k][0], fvr[k][1], fvr[k][2], fr[k]); printf(“\nForça total sobre a carga Q:\n”); printf(“Frvet = %eax + (%e)ay + (%e)az [N]; Frmod = %e[N]\n”, Fvr[0], Fvr[1], Fvr[2], Fr); printf(“Pressione uma tecla!”); while(!kbhit()); } break; A função menu tem o mesmo procedimento do programa CARGA.C. No caso da função dadosin, a variável local x, tipo int, é utilizada como contador. Nesta função, são solicitados os dados: CAPÍTULO 1 – CARGAS ELÉTRICAS, LEI DE COULOMB E CAMPO ELÉTRICO 21 1) Carga de teste Q e sua localização nos eixos x, y e z, respectivamente: printf(“\nEntre com o valor da carga de teste Q: “); scanf(“%lf”, &Q); printf(“\nEntre com a localização da carga Q (x, y, z sepa radas por espaços):”); for(x = 0; x < 3; x++) scanf(“%f”, &coordsQ[x]); 2) Número total de cargas q que agem sobre a carga de teste Q: printf(“Quantas cargas agem sobre a carga Q = %e? “, Q); scanf(“%d”, &totalq); 3) Valor das cargas q e suas respectivas localizações nos eixos x, y e z, respectivamente: x = 0; do{ printf(“\nEntre com o valor da carga q(%d):”, x+1); scanf(“%lf”, &carga[x]); printf(“\nEntre com a localização da carga q(%d) (x, y, z separadas por espaços):”, x+1); scanf(“%f”, &coordsq[x][0]); scanf(“%f”, &coordsq[x][1]); scanf(“%f”, &coordsq[x][2]); x++; }while (x < totalq); Para a função cforca, é declarada a variável local cont, tipo int, utilizada como contador, e a variável local r, tipo float, responsável pelo calculo da distància entre cada carga q e a carga Q. Realizada a declaração das variáveis, um laço do...while calcula a distância entre cada carga q da carga de teste Q, e calcula a força gerada por q em Q em cada uma das componentes x, y e z, calculando por fim a magnitude resultante destas, até a última carga. do{ r = sqrt(pow(coordsQ[0] - coordsq[cont][0],2) + pow(coordsQ[1] - coordsq[cont][1],2) + pow(coordsQ[2] coordsq[cont][2],2)); 22 C - APLICADO AO APRENDIZADO DE ELETROMAGNETISMO fvr[cont][0] = 9e9*carga[cont]*Q*(coordsQ[0]coordsq[cont][0])/pow(r,3); fvr[cont][1] = 9e9*carga[cont]*Q*(coordsQ[1]coordsq[cont][1])/pow(r,3); fvr[cont][2] = 9e9*carga[cont]*Q*(coordsQ[2]coordsq[cont][2])/pow(r,3); fr[cont]=sqrt(pow(fvr[cont][0],2) + pow(fvr[cont][1],2) + pow(fvr[cont][2],2)); cont++; }while(cont < totalq); Tendo calculado as forças de cada uma das cargas separadamente, o programa zera a variável Fvr: cont = Fvr[0] Fvr[1] Fvr[2] 0; = 0; = 0; = 0; e gera um laço para calcular a resultante vetorial das forces exercidas sobre Q: do{ Fvr[0]+= fvr[cont][0]; Fvr[1]+= fvr[cont][1]; Fvr[2]+= fvr[cont][2]; cont++; }while(cont < totalq); finalizando com o cálculo da magnitude da força resultante, na declaração: Fr = sqrt(pow(Fvr[0],2) + pow(Fvr[1],2) + pow(Fvr[2],2)); 1.3 CAMPO ELÉTRICO Em se tratando de forças elétricas, vê-se que onde há uma carga, em qualquer ponto do espaço ao seu redor em que for colocada outra carga, uma força de repulsão (se as cargas forem de sinais iguais) ou de atração (se as cargas forem de sinais contrários) surgirá. Isso sugere a existência de um campo de forças gerado pela carga, o qual é denominado de campo CAPÍTULO 1 – CARGAS ELÉTRICAS, LEI DE COULOMB E CAMPO ELÉTRICO 23 elétrico. Este campo elétrico é um campo vetorial, e tem sempre a direção perpendicular à carga. Tomando uma carga q (denominada de carga de teste) em que se pode variar a sua posição, e uma carga fixa Q que se deseja calcular o valor do campo na posição da carga q, define-se o campo elétrico da carga Q por: E F , q cuja equação determina a eliminação da carga de teste para calcular o campo da carga Q no ponto em que a carga q se encontra. A unidade do campo elétrico é [N/C] (Newton/Coulomb), ou mais conhecida como [V/ m] (Volt/metro). Assim, o campo de uma carga pontual é definido como sendo: E Q 4SH 0 r 2 ar , considerando que a carga está na origem do sistema de coordenadas, em que se referencia a direção do campo na direção do raio (em coordenadas esféricas, desde que para qualquer ponto que se deseja calcular o valor deste campo, em relação à origem é o próprio valor de um raio esférico). Por outro lado, se a carga que gera o campo não está na origem do sistema de coordenadas, tem-se: E Q 4SH 0 R 2 aR em que o R é a distância entre o ponto a ser medido o campo, e a posição em que se encontra a carga que o gera: R ( x2 x1 )a x ( y2 y1 )a y ( z2 z1 )a z com R sendo seu módulo. Este campo pode ser visto na Figura 1.5. 24 C - APLICADO AO APRENDIZADO DE ELETROMAGNETISMO Figura 1.5: Campo elétrico de uma carga pontual ou esférica. Considerando que uma carga é distribuída em uma linha L (por exemplo, no eixo z), pode-se ver esta carga como uma infinita quantidade de cargas pontuais dQ sobrepostas, o que dá pela lei de Coulomb para cada uma das cargas sobrepostas, um elemento diferencial de força: dF qdQ 4SH 0 R 2 aR que, juntando todas as contribuições para calcular a força total tem-se: F f ³ f d F f ³ f qU L dz 4SH 0 R 2 desde que a carga dQ = R aR L dz. Dessa forma, como ( x2 x1 )a x ( y2 y1 )a y ( z2 z1 )a z r ar z a z , e a linha de carga se encontrar no eixo z (o que indica que os valores de x1 e y1 são zero) isso que faz com que, para a distância R fixa, o giro de 2 no plano xy desenhe um círculo de raio cilíndrico r. Também, o valor de z1 pode ser considerado zero (plano xy) devido à simetria da carga (inicia no - e finaliza no + ). Assim, retirando a carga de teste q, tem-se: CAPÍTULO 1 – CARGAS ELÉTRICAS, LEI DE COULOMB E CAMPO ELÉTRICO 25 que é completamente radial cilíndrica e perpendicular à linha. Este pode ser visto na Figura 1.6. Figura 1.6: Campo elétrico de uma linha de carga ou de uma carga distribuída em um cilindro: radial cilíndrico. Considerando que a linha de carga seja finita, o campo só será visto desta forma numa distância em que haja simetria (ponto central). Caso contrário, o resultado terá direções em r e z, quando se mudam os limites de integração, o que se pode verificar na equação do campo. 26 C - APLICADO AO APRENDIZADO DE ELETROMAGNETISMO Utilizando este resultado e juntando uma quantidade infinita de linhas de cargas paralelas formando uma superfície plana, encontra-se o resultado para uma superfície com cargas distribuídas S. Assim, tem-se que, considerando uma superfície de cargas no plano xz, uma porção desta superfície que forma uma linha (um elemento S com largura dx) tem o valor L = dx. E consequentemente, pelo resultado do campo elétrico S para uma linha de cargas, encontra-se: E U L aR f ³ d E ³ f 2SH R dx 0 U S f xax y a y dx ³ 2SH 0 f x 2 y 2 US ª 1 § y· 2 2 « ln x y a x arctan¨ ¸a y 2SH 0 ¬« 2 ©x¹ f f US S ay 2SH 0 US ay 2H 0 o que pode ser estendido de uma forma geral, como: E US an 2H 0 com an sendo o vetor de direção normal (perpendicular). Neste resultado, vê-se que, o campo de uma superfície infinita com carga distribuída é completamente normal e uniforme, o qual é apresentado na Figura 1.7. CAPÍTULO 1 – CARGAS ELÉTRICAS, LEI DE COULOMB E CAMPO ELÉTRICO 27 Figura 1.7: Campo elétrico de uma superfície de carga. Da mesma forma, utilizando o mesmo procedimento, encontra-se o campo elétrico de um volume de cargas distribuído em uma região finita. Isto é, dado uma distribuição volumétrica de cargas em uma região limitada, encontra-se: E ³vol Udv aR , 4SH 0 R 2 dv, em um ponto R distante desde que para cada elemento diferencial dele, é criado um pequeno campo elétrico, e a soma de todas as contribuições de campo dos elementos do volume da carga geram o campo total. Para calcular o ângulo formado entre dois campos resultantes de duas distribuições de cargas quaisquer, em um ponto definido, utiliza-se o produto escalar: E A EB E Ax EBx E Ay EBy E Az EBz E A EB cos T AB 28 C - APLICADO AO APRENDIZADO DE ELETROMAGNETISMO ou T AB § ¨E E arccos¨ A B ¨ E A EB © · § · ¨ E Ax EBx E Ay EBy E Az E Bz ¸ ¸ ¸ ¸ arccos¨ ¸ ¨ ¸ E A EB ¹ © ¹ em que A e B são os dois campos gerados pelas cargas qA e qB no ponto determinado. De acordo com a teoria apresentada, o programa apresentado a seguir calcula o valor do campo elétrico em um ponto P devido a uma distribuição de cargas, apresentando seu resultado tanto em magnitude, como na forma vetorial. ———————————— Programa CAMPO.C ———————————— #include #include #include #include <stdio.h> <conio.h> <math.h> <string.h> int item, dados = 0, totalq; float coordsq[30][3], coordsQ[3], coordsE[3]; double carga[30], Q, rho_l, rho_s, Er, Evr[3], evr[30][3], er[30]; char muda[2] = “”, tipo[2] = “”, eixo[2]; void menu (void); void dadosin (void); void ccampo(void); void main(){ int k; clrscr(); do{ menu(); switch(item){ case 1: dadosin(); CAPÍTULO 1 – CARGAS ELÉTRICAS, LEI DE COULOMB E CAMPO ELÉTRICO 29 break; case 2: if (!dados){ printf(“\nNão houve entrada de dados!\n”); printf(“Pressione uma tecla!”); while(!kbhit()); } else{ ccampo(); switch(tipo[0]){ case ‘q’: printf(“\nCampo no ponto (%f, %f, %f) da carga Q = %e [C] definida:\nEvr = %eax + (%e)ay + (%e)az [V/m]\nEr = %e [V/m]\n”, coordsE[0], coordsE[1], coordsE[2], Q, Evr[0], Evr[1], Evr[2], Er); break; case ‘v’: printf(“Campos individuais das cargas no ponto (%f, %f, %f):\n”, coordsE[0], coordsE[1], coordsE[2]); for(k = 0; k < totalq; k++) printf(“\nCarga q(%d) = %e [C]:\nEvet = %eax + (%e)ay + (%e)az [V/m];\nEmod = %e[V/m]\n”, k, carga[k], evr[k][0], evr[k][1], evr[k][2], er[k]); printf(“\nCampo resultante total das cargas no ponto (%f, %f, %f):\n”, coordsE[0], coordsE[1], coordsE[2]); printf(“Ervet = %eax + (%e)ay + (%e)az [V/m];\nErmod = %e[V/m]\n”, Evr[0], Evr[1], Evr[2], Er); break; case ‘l’: printf(“Campo da linha de carga Rho_L = %e [C/m] disposta no eixo %s:\n”, rho_l, eixo); switch(eixo[0]){ case ‘x’: printf(“Ervet = %eay + (%e)az [V/ m];\nErmod = %e[V/m]\n”, Evr[1], Evr[2], Er); break; case ‘y’: printf(“Ervet = %eax + (%e)az [V/ 30 C - APLICADO AO APRENDIZADO DE ELETROMAGNETISMO m];\nErmod = %e[V/m]\n”, Evr[0], Evr[2], Er); break; case ‘z’: printf(“Ervet = %eax + (%e)ay [V/ m];\nErmod = %e[V/m]\n”, Evr[0], Evr[1], Er); printf(“ou em Coordenadas Cilíndricas\nErvet = %ear [V/ m]\n”, Er); break; } break; case ‘s’: printf(“Campo da superfície de carga Rho_S = %e [C/m^2] disposta no plano %s:\n”, rho_s, eixo); if(strcmp(eixo, “xy”) || strcmp(eixo, “yx”)) printf(“Ervet = %eaz [V/m];\nErmod = %e[V/m]\n”, Evr[2], Er); else if(strcmp(eixo, “yz”) || strcmp(eixo, “zy”)) printf(“Ervet = %eax [V/m];\nErmod = %e[V/m]\n”, Evr[0], Er); else if(strcmp(eixo, “xz”) || strcmp(eixo, “zx”)) printf(“Ervet = %eay [V/ m];\nErmod = %e[V/m]\n”, Evr[1], Er); break; } printf(“Pressione uma tecla!”); while(!kbhit()); } break; case 0: break; } }while (item != 0); } void menu(void){ do{ clrscr(); printf(“\n(0) - Sai”); printf(“\n(1) - Entrada de dados”); printf(“\n(2) - Calcular campos\n\n->”); CAPÍTULO 1 – CARGAS ELÉTRICAS, LEI DE COULOMB E CAMPO ELÉTRICO 31 scanf(“%d”, &item); if((item > 2) || (item < 0)){ printf(“Inválido! Pressione uma tecla!”); while(!kbhit()); } }while((item < 0) || (item > 2)); } void dadosin(void){ int x; clrscr(); strcpy(muda, “s”); if(dados == 1){ do{ printf(“Deseja mudar os dados das cargas? (s/n)\n->”); scanf(“%s”, muda); }while(strcmp(muda, “s”) && strcmp(muda, “n”)); } if(muda[0] == ‘s’){ do{ printf(“Que tipo de distribuição de cargas:\n(q)Uma carga, (v)Várias cargas, (l)Linear, (s)Superficial\n->”); scanf(“%s”, tipo); }while((tipo[0] != ‘q’) && (tipo[0] != ‘v’) && (tipo[0] != ‘l’) && (tipo[0] != ‘s’)); switch(tipo[0]){ case ‘q’: printf(“\nEntre com o valor da carga de teste Q: “); scanf(“%lf”, &Q); printf(“\nEntre com a localização da carga Q (x, y, z separados por espaços): “); for(x = 0; x < 3; x++) scanf(“%f”, &coordsQ[x]); break; case ‘v’: printf(“Quantas cargas?\n”); scanf(“%d”, &totalq); x = 0; do{ printf(“\nEntre com o valor da carga q(%d):\n”, x+1); scanf(“%lf”, &carga[x]); printf(“\nEntre com a localização da carga q(%d) (x, y, z separados por espaços):\n”, x+1); scanf(“%f”, &coordsq[x][0]); scanf(“%f”, &coordsq[x][1]); 32 C - APLICADO AO APRENDIZADO DE ELETROMAGNETISMO scanf(“%f”, &coordsq[x][2]); x++; }while (x < totalq); break; case ‘l’: printf(“\nEntre com o valor de Rho_L:\n”); scanf(“%lf”, &rho_l); printf(“Em qual eixo a linha de cargas se encontra? (x)/(y)/(z)\n”); do{ scanf(“%s”, eixo); }while((eixo[0] != ‘x’) && (eixo[0] != ‘y’) && (eixo[0] != ‘z’)); eixo[1] = ‘\0’; break; case ‘s’: printf(“\nEntre com o valor de Rho_S:\n”); scanf(“%lf”, &rho_s); printf(“Em qual plano a superfície de cargas se encontra? (xy)/(yz)/(xz)\n”); do{ scanf(“%s”, eixo); }while(strcmp(eixo, “xy”) && strcmp(eixo, “yx”) && strcmp(eixo, “xz”) && strcmp(eixo, “zy”) && strcmp(eixo, “yz”) && strcmp(eixo, “zx”)); break; default: break; } } printf(“Qual a posição a ser calculado o campo? (x, y, z separados por espaços)\n”); scanf(“%f”, &coordsE[0]); scanf(“%f”, &coordsE[1]); scanf(“%f”, &coordsE[2]); printf(“\nDados completos! Pressione uma tecla...”); while(!kbhit()); dados = 1; } void ccampo(void){ int cont; float r; switch(tipo[0]){ case ‘q’: CAPÍTULO 1 – CARGAS ELÉTRICAS, LEI DE COULOMB E CAMPO ELÉTRICO 33 r = sqrt(pow(coordsE[0]-coordsQ[0],2)+pow(coordsE[1]coordsQ[1],2)+ pow(coordsE[2]-coordsQ[2],2)); Evr[0] = 9e9*Q*(coordsE[0]-coordsQ[0])/pow(r,3); Evr[1] = 9e9*Q*(coordsE[1]-coordsQ[1])/pow(r,3); Evr[2] = 9e9*Q*(coordsE[2]-coordsQ[2])/pow(r,3); Er=sqrt(pow(Evr[0],2) + pow(Evr[1],2) + pow(Evr[2],2)); break; case ‘v’: cont = 0; do{ r = sqrt(pow(coordsE[0]coordsq[cont][0],2)+pow(coordsE[1]coordsq[cont][1],2)+pow(coordsE[2]coordsq[cont][2],2)); evr[cont][0] = 9e9*carga[cont]*(coordsE[0]coordsq[cont][0])/ pow(r,3); evr[cont][1] = 9e9*carga[cont]*(coordsE[1]coordsq[cont][1])/ pow(r,3); evr[cont][2] = 9e9*carga[cont]*(coordsE[2]coordsq[cont][2])/ pow(r,3); er[cont]=sqrt(pow(evr[cont][0],2) + pow(evr[cont][1],2) + pow(evr[cont][2],2)); cont++; }while(cont < totalq); cont = 0; Evr[0] = 0; Evr[1] = 0; Evr[2] = 0; do{ Evr[0]+= evr[cont][0]; Evr[1]+= evr[cont][1]; Evr[2]+= evr[cont][2]; cont++; }while(cont < totalq); Er = sqrt(pow(Evr[0],2) + pow(Evr[1],2) + pow(Evr[2],2)); break; case ‘l’: switch(eixo[0]){ case ‘x’: r = sqrt(pow(coordsE[1],2)+pow(coordsE[2],2)); Evr[0] = 0; Evr[1] = 1.8e10*rho_l*coordsE[1]/r; Evr[2] = 1.8e10*rho_l*coordsE[2]/r; Er = sqrt(pow(Evr[1],2) + pow(Evr[2],2)); break; 34 C - APLICADO AO APRENDIZADO DE ELETROMAGNETISMO case ‘y’: r = sqrt(pow(coordsE[0],2)+pow(coordsE[2],2)); Evr[0] = 1.8e10*rho_l*coordsE[0]/r; Evr[1] = 0; Evr[2] = 1.8e10*rho_l*coordsE[2]/r; Er = sqrt(pow(Evr[0],2) + pow(Evr[2],2)); break; case ‘z’: r = sqrt(pow(coordsE[0],2)+pow(coordsE[1],2)); Evr[0] = 1.8e10*rho_l*coordsE[0]/r; Evr[1] = 1.8e10*rho_l*coordsE[1]/r; Evr[2] = 0; Er = sqrt(pow(Evr[0],2) + pow(Evr[1],2)); break; } break; case ‘s’: Evr[0] = 0; Evr[1] = 0; Evr[2] = 0; if(strcmp(eixo, “xy”) || strcmp(eixo, “yx”)) Evr[2] = rho_s/1.7708e-11; else if(strcmp(eixo, “yz”) || strcmp(eixo, “zy”)) Evr[0] = rho_s/1.7708e-11; else if(strcmp(eixo, “xz”) || strcmp(eixo, “zx”)) Evr[1] = rho_s/1.7708e-11; break; default: break; } } 1.3.1 Entendendo o Programa CAMPO.C Este programa apresenta um menu similar aos programas anteriores, mas devido aos cálculos mais detalhados e mais amplidão em suas aplicações, as funções necessitam de maiores detalhamentos além de outros comandos. Neste programa, o usuário pode calcular o campo elétrico em um ponto determinado, cujo campo pode ser gerado por uma carga elétrica, várias cargas em pontos determinados, uma linha de carga em um dos eixos, ou uma superfície de cargas em um dos planos. Os resultados podem ser modificados tantos no tipo de distribuição das cargas e localização, como apenas no ponto onde se quer calcular o campo, sendo CAPÍTULO 1 – CARGAS ELÉTRICAS, LEI DE COULOMB E CAMPO ELÉTRICO 35 esses resultados apresentados nas formas vetorial e modular (magnitude) para cada caso. Devido à necessidade de utilização de funções como strcmp e strcpy, que compara strings e copia textos para variáveis, a inclusão da biblioteca string.h é necessária. As demais bibliotecas são utilizadas pelos mesmos motivos dos programas anteriores. #include #include #include #include <stdio.h> <conio.h> <math.h> <string.h> Nas variáveis globais deste programa são incluídas em relação ao programa COULOMB.C: tipo float – coordsE, que guarda o valor do ponto (as três coordenadas) onde se deseja determinar o valor do campo elétrico; tipo double – rho_l, rho_s, Er, Evr, evr e er, que são responsáveis por guardar os valores da carga em uma distribuição linear, carga em uma distribuição superficial, magnitude do campo total, campo vetorial total, campo vetorial por carga e magnitude do campo por carga, respectivamente; tipo char – muda, tipo e eixo, responsáveis pelo delineamento do fluxo do programa, para verificar se o usuário tem interesse em mudar valores ou distribuição das cargas, avaliando o tipo de distribuição da carga e qual eixo ou plano que se encontra as cargas, quando são distribuídas em linhas ou superfícies, respectivamente. int item, dados = 0, totalq; float coordsq[30][3], coordsQ[3], coordsE[3]; double carga[30], Q, rho_l, rho_s, Er, Evr[3], evr[30][3], er[30]; char muda[2] = “”, tipo[2] = “”, eixo[2]; Os protótipos das funções apresentam uma modificação apenas para a função ccampo, que chama a função que realiza a análise e o cálculo do campo no ponto definido na entrada dos dados. void menu (void); void dadosin (void); void ccampo(void); 36 C - APLICADO AO APRENDIZADO DE ELETROMAGNETISMO O programa, em relação ao programa COULOMB.C, diferencia-se mais a partir da função main. Especificamente, no teste do comando switch...case, quando o valor da variável item é 2. Neste caso, a função ccampo é chamada, onde são realizados os cálculos do campo no ponto determinado, e um novo switch...case é aberto, de forma a direcionar o fluxo do programa, de acordo com a variável tipo. Quando o gerador do campo é uma única carga, esta variável apresenta seu valor como ‘q’, e o valor do campo na forma vetorial e sua magnitude é apresentada: ccampo(); switch(tipo[0]){ case ‘q’: printf(“\nCampo no ponto (%f, %f, %f) da carga Q = %e [C] definida:\nEvr = %eax + (%e)ay + (%e)az [V/ m]\nEr = %e [V/m]\n”, coordsE[0], coordsE[1], coordsE[2], Q, Evr[0], Evr[1], Evr[2], Er); quando o valor da variável tipo é ‘v’, o programa apresenta o campo na forma vetorial e sua magnitude no ponto, referente à cada carga: case ‘v’: printf(“Campos individuais das cargas no ponto (%f, %f, %f):\n”, coordsE[0], coordsE[1], coordsE[2]); for(k = 0; k < totalq; k++) printf(“\nCarga q(%d) = %e [C]:\nEvet = %eax + (%e)ay + (%e)az [V/m];\nEmod = %e[V/m]\n”, k, carga[k], evr[k][0], evr[k][1], evr[k][2], er[k]); e o campo resultante no ponto, devido à todas as cargas: printf(“\nCampo resultante total das cargas no ponto (%f, %f, %f):\n”, coordsE[0], coordsE[1], coordsE[2]); printf(“Ervet = %eax + (%e)ay + (%e)az [V/m];\nErmod = %e[V/ m]\n”, Evr[0], Evr[1], Evr[2], Er); Se a variável tipo tem o valor ‘l’, a entrada de dados definiu uma linha de cargas, e o campo no ponto é apresentado de acordo com o eixo que o usuário definiu (outro switch...case testando o valor da variável eixo) CAPÍTULO 1 – CARGAS ELÉTRICAS, LEI DE COULOMB E CAMPO ELÉTRICO 37 case ‘l’: printf(“Campo da linha de carga Rho_L = %e [C/m] disposta no eixo %s:\n”, rho_l, eixo); switch(eixo[0]){ case ‘x’: printf(“Ervet = %eay + (%e)az [V/m];\nErmod = %e[V/ m]\n”, Evr[1], Evr[2], Er); break; case ‘y’: printf(“Ervet = %eax + (%e)az [V/m];\nErmod = %e[V/ m]\n”, Evr[0], Evr[2], Er); break; case ‘z’: printf(“Ervet = %eax + (%e)ay [V/m];\nErmod = %e[V/ m]\n”, Evr[0], Evr[1], Er); printf(“ou em Coordenadas Cilíndricas\nErvet = %ear [V/m]\n”, Er); break; Observe que, no caso da linha de cargas, quando a linha está definida posicionada no eixo z, o resultado é apresentado tanto nas coordenadas cartesianas, como nas coordenadas cilíndricas. Se a carga está distribuída em uma superfície, a variável tipo apresenta seu valor ‘s’. Consequentemente, a variável eixo é avaliada, e o resultado é apresentado de acordo com o plano em que a carga está distribuída. Observe que neste caso, a entrada dada referente ao plano, pode ser invertida, como plano xy ou plano yx, que o programa entende da mesma forma. case ‘s’: printf(“Campo da superfície de carga Rho_S = %e [C/m^2] disposta no plano %s:\n”, rho_s, eixo); if(strcmp(eixo, “xy”) || strcmp(eixo, “yx”)) printf(“Ervet = %eaz [V/m];\nErmod = %e[V/m]\n”, Evr[2], Er); else if(strcmp(eixo, “yz”) || strcmp(eixo, “zy”)) printf(“Ervet = %eax [V/m];\nErmod = %e[V/m]\n”, Evr[0], Er); else if(strcmp(eixo, “xz”) || strcmp(eixo, “zx”)) printf(“Ervet = %eay [V/m];\nErmod = %e[V/ m]\n”, Evr[1], Er); break; 38 C - APLICADO AO APRENDIZADO DE ELETROMAGNETISMO Por fim, a função main é finalizada como nos demais programas. A função menu, só difere dos programas anteriores, no texto de entrada de dados, referente aos cálculos. printf(“\n(2) - Calcular campos\n\n->”); A função de entrada de dados, dadosin, tem a variável local inteira x para ser utilizada como contador em alguns laços: int x; Após a limpeza da tela pela função clrscr(), a variável tipo char, muda, obtém o valor “s”, para direcionar o fluxo inicial do programa para entrar os dados. clrscr(); strcpy(muda, “s”); Quando os dados já foram introduzidos uma vez (variável dados é igual a 1), o valor da variável muda pode ser modificado: se for escolhido o valor ‘s’, o programa direciona para modificar os dados de valores e distribuição das cargas, e se for ‘n’, o programa salta para o final da função dadosin, para solicitar apenas o ponto em que se deseja calcular o campo elétrico: if(dados == 1){ do{ printf(“Deseja mudar os dados das cargas? (s/n)\n->”); scanf(“%s”, muda); }while(strcmp(muda, “s”) && strcmp(muda, “n”)); } Como inicialmente a variável muda tem o valor ‘s’, ou caso já se tenha entrado com os dados e solicitado mudança nos valores e disposições das cargas, o programa na função dadosin solicita o tipo de distribuição de cargas que se deseja, em que necessariamente a variável tipo pode obter os valores ‘q’ (para uma única carga), ‘v’ (para várias cargas), ‘l’ (para distribuição linear) e ‘s’ (para distribuição superficial). CAPÍTULO 1 – CARGAS ELÉTRICAS, LEI DE COULOMB E CAMPO ELÉTRICO 39 if(muda[0] == ‘s’){ do{ printf(“Que tipo de distribuição de cargas:\n(q)Uma carga, (v)Várias cargas, (l)Linear, (s)Superficial\n->”); scanf(“%s”, tipo); }while((tipo[0] != ‘q’) && (tipo[0] != ‘v’) && (tipo[0] != ‘l’) && (tipo[0] != ‘s’)); Logo em seguida, através de um switch...case, o valor da variável tipo é avaliado. Caso seu valor seja ‘q’, o programa solicita a entrada do valor da carga Q e sua localização: case ‘q’: printf(“\nEntre com o valor da carga de teste Q: “); scanf(“%lf”, &Q); printf(“\nEntre com a localização da carga Q (x, y, z separados por espaços): “); for(x = 0; x < 3; x++) scanf(“%f”, &coordsQ[x]); break; Se o valor da variável tipo for ‘v’, o programa solicita o valor de cada uma das cargas e sua respectiva localização: case ‘v’: printf(“Quantas cargas?\n”); scanf(“%d”, &totalq); x = 0; do{ printf(“\nEntre com o valor da carga q(%d):\n”, x+1); scanf(“%lf”, &carga[x]); printf(“\nEntre com a localização da carga q(%d) (x, y, z separados por espaços):\n”, x+1); scanf(“%f”, &coordsq[x][0]); scanf(“%f”, &coordsq[x][1]); scanf(“%f”, &coordsq[x][2]); x++; }while (x < totalq); break; 40 C - APLICADO AO APRENDIZADO DE ELETROMAGNETISMO Se seu valor é ‘l’, o programa solicita a entrada do valor de em que essa linha de cargas se encontra: L e o eixo case ‘l’: printf(“\nEntre com o valor de Rho_L:\n”); scanf(“%lf”, &rho_l); printf(“Em qual eixo a linha de cargas se encontra? (x)/ (y)/(z)\n”); do{ scanf(“%s”, eixo); }while((eixo[0] != ‘x’) && (eixo[0] != ‘y’) && (eixo[0] != ‘z’)); eixo[1] = ‘\0’; break; e se for ‘s’, o programa solicita o valor de localiza: S e o plano em que ela se case ‘s’: printf(“\nEntre com o valor de Rho_S:\n”); scanf(“%lf”, &rho_s); printf(“Em qual plano a superfície de cargas se encontra? (xy)/(yz)/(xz)\n”); do{ scanf(“%s”, eixo); }while(strcmp(eixo, “xy”) && strcmp(eixo, “yx”) && strcmp(eixo, “xz”) && strcmp(eixo, “zy”) && strcmp(eixo, “yz”) && strcmp(eixo, “zx”)); break; Neste caso, o plano é solicitado, e entendido nos seus contrários: xy ou yx, xz ou zx e yz ou zy. Enquanto não houver a entrada de um desses planos, o programa continua a solicitar a entrada correta. Ao finalizar o switch...case, o programa solicita a entrada do ponto onde se deseja calcular o campo elétrico: printf(“Qual a posição a ser calculado o campo? (x, y, z separados por espaços)\n”); scanf(“%f”, &coordsE[0]); scanf(“%f”, &coordsE[1]); scanf(“%f”, &coordsE[2]); CAPÍTULO 1 – CARGAS ELÉTRICAS, LEI DE COULOMB E CAMPO ELÉTRICO 41 Por fim, o programa apresenta o texto confirmando que os dados foram inseridos, aguardando o pressionamento de uma tecla qualquer, tornando a variável dados igual a 1: printf(“\nDados completos! Pressione uma tecla...”); while(!kbhit()); dados = 1; Na função ccampo, a variável cont, tipo int, é declarada para ser utilizada como contador, e a variável r, tipo float, é declarada para calcular a distância das cargas ao ponto em que se deseja calcular o campo elétrico: int cont; float r; Por meio de um comando switch…case, a variável tipo é avaliada, para direcionar o fluxo dos cálculos do programa para a especificidade definida. Assim, se seu valor é ‘q’, a carga é uma única, e o programa calcula a distância r da carga Q ao ponto em que se deseja calcular o campo, e calcula os valores de cada componente (x, y e z) do campo no ponto. Por fim, calcula a magnitude deste campo: case ‘q’: r = sqrt(pow(coordsE[0]-coordsQ[0],2)+pow(coordsE[1]coordsQ[1],2)+ pow(coordsE[2]-coordsQ[2],2)); Evr[0] = 9e9*Q*(coordsE[0]-coordsQ[0])/pow(r,3); Evr[1] = 9e9*Q*(coordsE[1]-coordsQ[1])/pow(r,3); Evr[2] = 9e9*Q*(coordsE[2]-coordsQ[2])/pow(r,3); Er=sqrt(pow(Evr[0],2) + pow(Evr[1],2) + pow(Evr[2],2)); Se a variável tipo tem o valor ‘v’, o programa calcula separadamente o valor do campo no ponto, referente à cada uma das cargas distribuídas individualmente: case ‘v’: cont = 0; do{ r = sqrt(pow(coordsE[0]coordsq[cont][0],2)+pow(coordsE[1]coordsq[cont][1],2)+pow(coordsE[2]coordsq[cont][2],2)); 42 C - APLICADO AO APRENDIZADO DE ELETROMAGNETISMO evr[cont][0] = 9e9*carga[cont]*(coordsE[0]coordsq[cont][0])/ pow(r,3); evr[cont][1] = 9e9*carga[cont]*(coordsE[1]coordsq[cont][1])/ pow(r,3); evr[cont][2] = 9e9*carga[cont]*(coordsE[2]coordsq[cont][2])/ pow(r,3); er[cont]=sqrt(pow(evr[cont][0],2) + pow(evr[cont][1],2) + pow(evr[cont][2],2)); cont++; }while(cont < totalq); Depois zera os valores da variável Evr e soma todas as contribuições das cargas distribuídas, para determinar nesta variável, o valor do campo vetorial resultante: cont = 0; Evr[0] = 0; Evr[1] = 0; Evr[2] = 0; do{ Evr[0]+= evr[cont][0]; Evr[1]+= evr[cont][1]; Evr[2]+= evr[cont][2]; cont++; }while(cont < totalq); e calcula o valor da magnitude do campo resultante: Er = sqrt(pow(Evr[0],2) + pow(Evr[1],2) + pow(Evr[2],2)); Quando a variável tipo apresenta o valor ‘l’, um switch…case é gerado para avaliar o valor da variável eixo. case ‘l’: switch(eixo[0]){ De acordo com o valor desta variável, a distância r é calculada (apenas com os dois eixos diferentes do definido nesta variável), e o campo (vetorial e magnitude) é calculado: case ‘x’: r = sqrt(pow(coordsE[1],2)+pow(coordsE[2],2)); CAPÍTULO 1 – CARGAS ELÉTRICAS, LEI DE COULOMB E CAMPO ELÉTRICO 43 Evr[0] = 0; Evr[1] = 1.8e10*rho_l*coordsE[1]/r; Evr[2] = 1.8e10*rho_l*coordsE[2]/r; Er = sqrt(pow(Evr[1],2) + pow(Evr[2],2)); break; case ‘y’: r = sqrt(pow(coordsE[0],2)+pow(coordsE[2],2)); Evr[0] = 1.8e10*rho_l*coordsE[0]/r; Evr[1] = 0; Evr[2] = 1.8e10*rho_l*coordsE[2]/r; Er = sqrt(pow(Evr[0],2) + pow(Evr[2],2)); break; case ‘z’: r = sqrt(pow(coordsE[0],2)+pow(coordsE[1],2)); Evr[0] = 1.8e10*rho_l*coordsE[0]/r; Evr[1] = 1.8e10*rho_l*coordsE[1]/r; Evr[2] = 0; Er = sqrt(pow(Evr[0],2) + pow(Evr[1],2)); break; Da mesma forma, caso a variável tipo esteja com o valor ‘s’, as componentes do campo são zeradas: case ‘s’: Evr[0] = 0; Evr[1] = 0; Evr[2] = 0; e o cálculo das mesmas é atualizado, de acordo com o plano que a superfície de cargas se encontra. if(strcmp(eixo, “xy”) || strcmp(eixo, “yx”)) Evr[2] = rho_s/1.7708e-11; else if(strcmp(eixo, “yz”) || strcmp(eixo, “zy”)) Evr[0] = rho_s/1.7708e-11; else if(strcmp(eixo, “xz”) || strcmp(eixo, “zx”)) Evr[1] = rho_s/1.7708e-11; A necessidade de zerar as componentes primeiramente, é que no caso do campo de uma superfície de cargas em um dos planos definidos, duas componentes são nulas. Dessa forma, o programa só precisa calcular uma componente única. 44 C - APLICADO AO APRENDIZADO DE ELETROMAGNETISMO 1.4 EXERCÍCIOS 1.1)Modifique o programa CARGA.C para que seja possível calcular cargas nas coordenadas cilíndricas e esféricas. 1.2)Desenvolva um programa para converter coordenadas. 1.3)Modifique o programa COULOMB.C para que seja possível calcular forças em distribuições volumétricas de cargas. 1.4)Modifique o programa COULOMB.C para que seja possível entrar com pontos em outras coordenadas e seus cálculos serem realizados nas coordenadas que o usuário definir. 1.5)Modifique o programa CAMPO.C para que sejam calculados campos gerados por distribuições volumétricas de cargas. 1.6)Modifique o programa CAMPO.C para que se possam entrar com equações de campos e o programa calcule seu valor em um ponto que o usuário desejar. 1.7)Modifique o programa CAMPO.C para que o seja apresentada a equação do campo da distribuição de cargas definida. 1.8)Modifique o programa CAMPO.C para que se possa calcular o campo em um ponto definido, de linhas e superfícies de cargas finitas.