Notas sôbre Escalas Funcionais Ivan de Queiroz Barros 2005 2 Contents 1 Escalas Funcionais 1.1 Introdução . . . . . . . . . . . . . . . . . 1.2 Escala Funcional . . . . . . . . . . . . . 1.3 Representação prática . . . . . . . . . . 1.4 Cesuras . . . . . . . . . . . . . . . . . . 1.5 Escolha dos passos e pontos de cesura . . 1.5.1 Marcha de Cálculo Manual . . . . 1.5.2 Exemplo didático . . . . . . . . . 1.6 Interpolação linear numa escala funcional 1.7 Ajuste dos Módulos . . . . . . . . . . . . 1.8 Erro relativo na leitura de uma escala . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 . 3 . 3 . 5 . 5 . 7 . 8 . 9 . 12 . 12 . 14 2 Programas 15 2.1 O programa Cesuras . . . . . . . . . . . . . . . . . . . . . . . 15 2.2 O programa CadScale . . . . . . . . . . . . . . . . . . . . . . 18 3 Exemplos: Ábacos de Pontos Alinhados 3.1 Ábacos de Pontos Alinhados . . . . . . . . . . . . . . . . . . . 3.2 Casos Particulares . . . . . . . . . . . . . . . . . . . . . . . . 3.3 Exemplo: Ábaco para pV=RT . . . . . . . . . . . . . . . . . . 1 23 23 24 26 2 CONTENTS Chapter 1 Escalas Funcionais 1.1 Introdução Com o advento dos computadores digitais muitos dispositivos de cálculo cairam em desuso como a régua de cálculo, as máquinas manuais e elétricas de calcular. Outros meios como o cálculo gráfico, os ábacos cartesianos e os de pontos alinhados, perderam grande parte de sua importância, mas continuam ainda a serem empregados em muitas situações. O objetivo destas notas é mostrar a utilização dos programas Cesuras, CadScale e Cadinho na construção e desenho das escalas funcionais e dos ábacos de pontos alinhados que usam essas escalas. Neste capítulo, revisitamos a teoria das escalas funcionais, utilizadas nos ábacos de pontos alinhados. No capítulo 2 apresentamos os programas para cálculo e desenho das escalas funcionais com o emprego do programa Cadinho (CAD a duas dimensões). No capítulo 3 introduzimos os ábacos de pontos alinhados e usamos os programas na construção e desenho de um ábaco para a equação dos gases perfeitos. Os programas são escritos em Java. O programa Cesuras está escrito de forma a facilitar o entendimento por quem não é familiar com Java. A seção 2.2 e parte da seção 3.3 supõem o conhecimento de Java. 1.2 Escala Funcional Seja f : [am , aM ] ⊂ R → R2 uma função de classe C 3 tal que f (a) = 0, ∀a ∈ [am , aM ]. Sejam ainda, x0 ∈ R2 e u1 , u2 ∈ R, u1 > 0, u2 > 0. 3 4 CHAPTER 1. ESCALAS FUNCIONAIS As equações x1 = u1 f1 (a) − x01, x2 = u2 f2 (a) − x02 , a ∈ [am , aM ] , estabelecem uma correspondência entre os valores a ∈ [am , aM ] e os pontos x ∈ R2 de uma curva f parametrizada por a, de classe C 3 . Essa correspondência será chamada escala funcional e o suporte da curva, suporte da escala. Os valores a, são chamados cotas, os valores u1 e u2 são os módulos da escala, e x0 é chamado ponto de referência. Se x01 = u1f1 (am ) e x02 = u2f2 (am ), as equações da escala tornamse x1 = u1 [f1 (a) − f1 (am )] , x2 = u2 [f2 (a) − f2 (am )] , e a cota am fica associada ao ponto de referência x0. Se x0 = 0, as equações da escala ficam x1 = u1 f1 (a) , x2 = u2 f2 (a) , e o ponto de referência x0 coincide com o ponto origem. Por conveniência, vamos introduzir a função g : [am , aM ] ⊂ R → R2 definida por g1 (a) = u1 f1 (a) , g2 (a) = u2f2 (a) . O comprimento da escala entre duas cotas a1 e a2 pode ser calculado por a2 |g (a)| da a1 e os comprimentos das projeções do suporte sôbre cada um dos eixos do sistema de referência valem l 1 = u1 max f1 (a) − min f1 (a) am ≤a≤aM e l 2 = u2 max am ≤a≤aM am ≤a≤aM f2 (a) − min am ≤a≤aM f2 (a) 1.3. REPRESENTAÇÃO PRÁTICA 1.3 5 Representação prática Para uma representação gráfica, adotaremos como unidade gráfica 1 mm. Como o intervalo [am , aM ] é um conjunto infinito, limitamo-nos a representar graficamente um número finito de cotas, as chamada cotas explícitas. Quando não houver perigo de confusão referir-nos-emos simplesmente a cotas. Definimos passo, símbolo θ, como a diferença em valor absoluto entre duas cotas explícitas consecutivas. Definimos intervalo gráfico, símbolo t, como a medida em valor absoluto do segmento determinado por duas cotas explícitas consecutivas. Podemos então escrever a+θ t= |g (s)| ds. a onde a é uma cota explícita. Dois critérios práticos são utilizados para a escolha das cotas explícitas: Viabilidade Fixamos um valor mínimo t0 para os intervalos gráficos, com a condição que a olho nu possamos avaliar um décimo do intervalo mínimo escolhido. Dada a possibilidade de avaliação visual de ε = 0, 1 mm, podemos escolher t0 = 1 mm. Utilidade A fim de facilitar a leitura das cotas implícitas, adotamos passos constantes em sub-intervalos, passos êsses, escolhidos entre os seguintes: ··· 0, 01 0, 02 0, 05 0, 1 0, 2 1 2 1 2 5 10 20 · · · ou ··· 1 2 5 30 1.4 10 15 1o 2o 30 5o 10o · · · 5 10 15 (1.1) Cesuras Chamamos pontos de cesura os pontos do suporte da escala cuja cotas satisfazem as condições: 1. dividem o intervalo [am , aM ] em partes onde o passo θ é constante 6 CHAPTER 1. ESCALAS FUNCIONAIS Figure 1.1: Ponto de Cesura 2. em cada uma delas, o valor de θ à esquerda e à direita são distintos. Indicaremos a cota de um ponto de cesura pela letra ξ. Suponhamos que estamos cotando a escala com o passo θ e queremos determinar a cota ξ a partir da qual o passo θ ocasionará intervalos gráficos t menores que o intervalo mínimo t0 . Temos dois casos, conforme os intervalos gráficos aumentem num sentido ou outro da curva. Como ambos conduzem à mesma fórmula, consideraremos apenas um deles, representado na figura 1.1 Num ponto de cesura de cota ξ vale ξ ξ+θ |g (a)| da ≥ t0 > |g (a)| da. ξ−θ ξ A favor da segurança, podemos escrever max |g (a)| θ ≥ t0 > min |g (a)| θ ξ−θ≤a≤ξ ξ≤a≤ξ+θ e dividindo por θ max |g (a)| ≥ ξ−θ≤a≤ξ t0 > min |g (a)| ξ≤a≤ξ+θ θ Existem ε1 ≥ 0 e ε2 ≥ 0, tais que max |g (a)| = |g (ξ)| + ε1 ξ−θ≤a≤ξ e 1.5. ESCOLHA DOS PASSOS E PONTOS DE CESURA 7 min |g (a)| = |g (ξ)| − ε2 ξ≤a≤ξ+θ donde t0 > |g (ξ)| − ε2 θ t0 − |g (ξ)| ≤ ε1 + ε2 . θ |g (ξ)| + ε1 ≥ ou Como ε1 + ε2 → 0 quando θ → 0, e como não se requer uma precisão absoluta, pois que de qualquer forma o valor achado para ξ será aproximado para uma cota explícita conveniente respeitando os passos adotados, podemos escrever t0 = |g (ξ)| θ ou t0 θ= . |g (ξ)| Observemos que 1. g (ξ) = 0. 2. O passo θ obtido da fórmula acima é o passo que ja não serve mais a partir da cota ξ dada, e que devemos portanto aumentar. A fórmula porém não nos diz se êsse passo é o passo à direita ou à esquerda de ξ. 3. A cota ξ obtida da fórmula acima a partir de um passo θ dado, é a cota do ponto de cesura a partir da qual devemos aumentar o passo. A fórmula porém não indica se θ é o passo à direita ou à esquerda de ξ. 1.5 Escolha dos passos e pontos de cesura Inicialmente escolhemos os comprimentos l1 e l2 , de acordo com o retângulo disponível na folha de desenho para a representação da escala. Em seguida determinamos os módulos u1 e u2 pelas equações l 1 = u1 max f1 (a) − min f1 (a) am ≤a≤aM am ≤a≤aM 8 CHAPTER 1. ESCALAS FUNCIONAIS e l 2 = u2 max am ≤a≤aM f2 (a) − min am ≤a≤aM f2 (a) Se max f1 (a) = am ≤a≤aM min am ≤a≤aM f1 (a) temos necessariamente l1 = 0, e escolhemos arbitrariamente u1 = 1. A mesma observação vale para f2. Notemos que a condição f (a) = 0, ∀a ∈ [am , aM ] , impede que essa situação aconteça simultaneamente com f1 e f2 . 1.5.1 Marcha de Cálculo Manual 1. Calculamos θmin = θmax = t0 maxam ≤a≤aM |g (a)| t0 minam ≤a≤aM |g (a)| , . 2. Para cada valor do passo que consta na tabela 1.1 e que está incluido no intervalo [θmin , θmax ] ou que é imediatamente vizinho a êle, calculamos os valores de ξ que lhe correspondem por meio da equação |g (ξ)| = t0 . θ 3. Pelo exame dos pares (ξ 1 , θ1 ) , (ξ 2, θ2 ) , . . . , (ξ n , θ n ), assim obtidos, fiqual o passo θ a ser atribuído a cada subintervalo camos sabendo ξ i , ξ i+1 , i = 1, 2, . . . , n − 1. 4. Finalmente ajustamos os valores ξ i adotando valores convenientes para as cotas explicitas, e conservamos os que caem dentro do intervalo [am , aM ]. 1.5. ESCOLHA DOS PASSOS E PONTOS DE CESURA 1.5.2 9 Exemplo didático Escolher os passos e pontos de cesura para uma escala funcional, da qual são dados f1 (a) = (a − 1)2 f2 (a) = (a − 2) (10 − a) + 4 2 ≤ a ≤ 10 l1 = 160, l2 = 100. Cálculo de u1 e u2. Como f1 (a) = 2 (a − 1) > 0, para 2 ≤ a ≤ 10, f1 é estritamente crescente, donde 160 = l1 = u1 [f1 (10) − f1 (2)] = u1 (81 − 1) = 80u1 . Logo u1 = 2 Como f2 (a) = 2 (6 − a) vemos que f2 admite máximo em a = 6 onde assume o valor f2 (6) = 20, é estritamente crescente à esquerda de a = 6, e estritamente decrescente à direita. Nas extremidades do intervalo de definição, apresenta os valores f2 (2) = 0, e f2 (10) = 0. Portanto 100 = l2 = u2 [f2 (6) − f2 (2)] = u2 (20 − 0) = 20u2. Logo u2 = 5 Cáculo de θmax e θmin . A função g e sua derivada g ficam definidas por g1 (a) = 2 (a − 1)2 , g2 (a) = 5 (a − 2) (10 − a) + 20, g1 (a) = 4 (a − 1) , g2 (a) = 10 (6 − a) . Para cálculo de θmax e θmin usamos a fórmula θ2 = t20 . |g (a)|2 10 CHAPTER 1. ESCALAS FUNCIONAIS Adotaremos t0 = 1 mm. Então θ2 = g1 1 1 . 2 = 2 (a) + g2 (a) 16 (a − 1) + 100 (6 − a)2 2 Derivando h (a) = 16 (a − 1)2 + 100 (6 − a)2 obtemos h (a) = 232a − 1.232 cuja raiz é a = 5, 31 . Como h (2) < 0, h (2) = 1.616, e h (5, 31) = 366, 21, h (10) > 0, h (10) = 2.896, vemos que max h (a) = 2.896 e min h (a) = 366, 21 2≤a≤10 Portanto θmin = θmax = 2≤a≤10 √ 1 2.896 √ 1 366,21 = 0, 0185 = 0, 0523 Cálculo dos pares (ξ i , θi ). Tendo em vista os valores de θmin e θmax , selecionamos na tabela 1.1 os passos 0, 01 0, 02 0, 05 0, 10 Calculamos as cotas dos pontos de cesura ξ pela fórmula 2 |g (ξ)| = t20 θ2 Mas |g (ξ)|2 = 16 (a − 1)2 + 100 (6 − a)2 = 116ξ 2 − 1.232ξ + 3.613 Devemos então resolver a equação 116ξ 2 − 1.232ξ + 3.613 − 1 =0 θ2 1.5. ESCOLHA DOS PASSOS E PONTOS DE CESURA 11 para θ = 0, 01, 0, 02, 0, 05, e 0, 10 . Obtemos θ 0, 01 0, 02 0, 05 0, 10 Raiz Raiz −3, 814 14, 435 0, 997 9, 624 4, 602 6, 018 − − As raizes para θ = 0, 10 são complexas. Atribuição dos passos aos subintervalos ξ i , ξ i+1 . Pela tabela 1.2, ξ θ −3, 814 0, 997 4, 602 6, 018 9, 624 14, 435 0, 01 0, 02 0, 05 0, 05 0, 02 0, 01 (1.2) resulta a distribuição das cotas dos pontos de cesura e passos representada na tabela 1.3. Passos −3, 814 a 0, 997 0, 01 0, 997 a 4, 602 0, 02 (1.3) 4, 602 a 6, 018 0, 05 6, 018 a 9, 624 0, 02 9, 624 a 14, 435 0, 01 Ajustamento dos pontos de cesura. Ajustando as cotas dos pontos de cesura para cotas explícitas convenientes, levando em consideração os passos, resulta a distribuição final representada 12 CHAPTER 1. ESCALAS FUNCIONAIS na tabela 1.4 2, 0 a 4, 0 4, 0 a 7, 0 7, 0 a 10, 0 1.6 Passos 0, 02 0, 05 0, 02 (1.4) Interpolação linear numa escala funcional Para efetuarmos uma leitura entre duas cotas explícitas da escala funcional, podemos imaginar o segmento de curva, entre duas cotas explicitas, subdividido segundo um passo dez vezes menor. A leitura assim feita é problemática porquê a subdivisão assim feita é em geral não uniforme e portanto de difícil avaliação. Um procedimento aproximado, mais realista, consiste em supor que o suporte da escala entre duas cotas explícitas consecutivas é um segmento de reta (corda) , e dividir mentalmente o intervalo gráfico em dez partes iguais. Estaremos então fazendo uma interpolação linear visual. É com o objetivo de possibilitar essa interpolação que escolhemos t0 = 10ε = 1 mm. Êsse processo envolve na maioria das vezes um erro gráfico, que pode ser expresso por |x − x1 | onde x é posição verdadeira da cota e x1 a posição aproximada em que se supõe que esteja. Para que o processo seja considerado “praticamente exato” é preciso que o erro gráfico cometido |x − x1 |, não exceda o menor intervalo entre dois pontos que o olho humano possa perceber, isto é, |x − x1| ≤ ε. Para que esta condição seja satisfeita, veremos como ajustar os módulos por um fator α > 0. 1.7 Ajuste dos Módulos Substituamos os módulos u1 e u2 por αu1 e αu2 . Sejam a e a + θ duas cotas explícitas consecutivas, e a + mθ, com 0 ≤ m ≤ 1, uma cota intermediária. Substituindo x − x1 = α [g (a + mθ) − g (a)] − mα [g (a + θ) − g (a)] 1.7. AJUSTE DOS MÓDULOS 13 em |x − x1 | ≤ ε (condição fundamental), vem α |g (a + mθ) − g (a) − mg (a + θ) + mg (a)| ≤ ε. Desevolvendo g (a + mθ) e g (a + θ) pela fórmula de Taylor e desprezando os termos de ordem superior à segunda, obtemos as expressões aproximadas g (a + mθ) − f (a) ≈ mθg (a) + e m [g (a + θ) − g (a)] ≈ mθg (a) + m2 θ2 g (a) 2 mθ2 g (a) . 2 Ficamos com, m (m − 1) 2 θ g (a) ≤ ε. 2 O valor máximo de m (m − 1) é 1/4 e portanto a favor da segurança podemos escrever αθ2 g (a) ≤ ε. 8 O valor máximo que admitimos para θ num ponto a é, como ja vimos, α θ= 2t0 α |g (a)| (condição subsidiária), e portanto ainda a favor da segurança, 4t20 α (a) g ≤ ε, 2 8 α2 |g (a)| isto é, α≥ t20 g (a) ε . 2 |g (a)|2 Se adotarmos os valores t0 = 1 mm, e ε = 0, 05 mm, teremos: g (a) α ≥ 10 · |g (a)|2 Em conclusão, se esta desigualdade for respeitada, ao fazermos uma interpolação linear a olho, o erro gráfico cometido será menor que ε = 0, 05 mm (condição fundamental) desde que os intervalos gráficos não excedam apreciavelmente o dobro do intervalo gráfico mínimo t0 = 1 mm (condição subsidiária). 14 1.8 CHAPTER 1. ESCALAS FUNCIONAIS Erro relativo na leitura de uma escala Da equação de construção da escala x = g (a) − x0 resulta a aproximação |∆x| = |g (a)| |∆a| . Fazendo |∆x| = ε, temos a estimativa para o erro relativo na avaliação da cota a. |∆a| ε δa = = |a| |g (a)| |a| Chapter 2 Programas Conforme as expressões que definem as funções f1 e f2 , o procedimento indicado no Capítulo 1 para o cálculo das cesuras pode ser muito trabalhoso. Como alternativa, apresentamos a seguir um programa simples em Java, facilmente transportável para outra linguagem, para obter os pontos de cesura e os passos, e que dispensa o cálculo das derivadas. 2.1 O programa Cesuras package cesura; abstract class CesurasData { static double getMinimumInterval() { return 1.0; } static double getStartCota() { return 2.0; } static double getEndCota() { return 10.0; } static double[] getStepTable() { return new double[] {0.01,0.02,0.05,0.10,0.20,0.50,1.00}; 15 16 CHAPTER 2. PROGRAMAS } static double g1(double a) { return 2*(a-1)*(a-1); } static double g2(double a) { return 5*(a-2)*(10-a)+4; } } // end of CesurasData class public class Cesuras { static double[] theta = CesurasData.getStepTable(); static double a = CesurasData.getStartCota(); static double aM = CesurasData.getEndCota(); static double t0 = CesurasData.getMinimumInterval(); static {t0 = t0*t0;} // Returns the index of a step that is neither too small // nor too large. // Returns − 1 if the method f ails. static int startStepIndex(double a) { double t; for (int k = 0; k < theta.length; k++) { t = interval(a,theta[k]); if (t >= t0 && t <= 6.25*t0) { return k; } } return -1; } 2.1. O PROGRAMA CESURAS 17 // Returns the square of g(a + step) − g(a) static double interval(double a, double step) { double x1 = CesurasData.g1(a); double x2 = CesurasData.g2(a); double y1 = CesurasData.g1(a + step) - x1; double y2 = CesurasData.g2(a + step) - x2; return y1*y1 + y2*y2; } public static void main(String[] args) { double t, t1; int k = startStepIndex(a); double step = theta[k]; System.out.println(‘‘Cesura = ’’+a+‘‘ Passo = ’’+step); do { a = a+step; t = interval(a,step); if (t > 6.25*t0) { t1 = interval(a,theta[k-1]); if (t1 >= t0) { k=k-1; step = theta[k]; System.out.println(‘‘Cesura = ’’+a+‘‘ Passo = ’’+step); } } else if (t < t0) { k = k + 1; step = theta[k]; System.out.println(‘‘Cesura = ’’+a+‘‘ Passo = ’’+step); } } while (a <= aM); } } // end of Cesuras class 18 CHAPTER 2. PROGRAMAS A classe CesurasData fornece os dados da escala que ja havíamos analisado. Para usar o programa com outra escala, basta substituir o corpo dos métodos da classe CesurasData de acordo com os novos dados. Os pontos de cesura fornecidos pelo programa devem ser ajustados convenientemente de conforme os passos fornecidos. Observe que não é necessário o cálculo das derivadas de f1 e f2 . 2.2 O programa CadScale Uma vez determinados os pontos de Cesura, queremos desenhar a escala funcional. Para isso podemos empregar o programa Cadinho. Este possui no seu menu File o comando Load Objects que carrega um arquivo de objetos gráficos e os adiciona ao desenho corrente. Para construir o arquivo de objetos que descreve a escala funcional, usamos o programa CadScale. Os dados para o programa CadScale devem ser fornecidos pelos métodos de uma classe que implementa a interface CadScale.ScaleData declarada a seguir. interface CadScale.ScaleData { boolean isStraightLine(); double getStartCota(); double getEndCota(); double[][] getCesurasTable(); double g1(double a); double g2(double a); int getNumberOfDecimals(); int getFontSize(); double getAdjustmentFactor(); } Para o exemplo analisado no Capítulo 1, implementamos a interface CadScale.ScaleData pela classe abaixo, que denominamos ExampleScaleData package cadscale; 2.2. O PROGRAMA CADSCALE class ExampleScaleData implements CadScale.ScaleData { public ExampleScaleData() { } public boolean isStraightLine() { return false; } public double getStartCota() { return 2.0; } public double getEndCota() { return 10.0; } public double[][] getCesurasTable() { return new double[][] {{ 2.0, 0.05, 10}, { 4.0, 0.10, 10}, { 7.0, 0.05, 10}, {10.0, 0.00, 0}}; } public double g1(double a) { return 2*(a-1)*(a-1); } public double g2(double a) { return 5*(a-2)*(10-a)+4; } public int getNumberOfDecimals() { return 2; } public int getFontSize() { return 14; } public double getAdjustmentFactor() { return 1.2; } } 19 20 CHAPTER 2. PROGRAMAS Compilamos a classe ExampleScaleData. Vamos supor que o arquivo resultante ExampleScaleData.class, foi colocado na pasta <path>\cadscale, onde <path> indica a rota do package cadscale. O programa CadScale pode então ser executado pela linha de comando Java -cp <path> cadscale.CadScale(“ExampleScaleData”) Durante a execução, o programa CadScale pede o nome do arquivo no qual os objetos que descrevem graficamente a escala são gravados. Suponhamos que chamamos esse arquivo c:\ExemploScaleData.obj . Carregamos agora o programa Cadinho e invocamos o seu comando LoadObjects indicando o arquivo c:\ExemploScaleData.obj . O desenho da escala aparece na janela do Cadinho. Podemos agora manipular o desenho, ampliando, reduzindo, centralizando, colocando título, margem, etc. Na figura 2.1 vemos uma reprodução do desenho da escala impressa pelo Cadinho. 2.2. O PROGRAMA CADSCALE Figure 2.1: 21 22 CHAPTER 2. PROGRAMAS Chapter 3 Exemplos: Ábacos de Pontos Alinhados O objetivo desta seção é demonstrar o uso dos programas Cesuras, CadScale e Cadinho na construção de Ábacos de Pontos Alinhados. Inicialmente, uma breve introdução a este tipo de ábaco. 3.1 Ábacos de Pontos Alinhados Êstes ábacos permitem a representação de certas equações da forma F (z1 , z2 , z3 ) = 0 por meio de três escalas funcionais x1 = u1 ϕ1 (z1) + x0 y1 = u2 ϕ2 (z1) + y0 x2 = u1 ψ 1 (z2 ) + x0 y2 = u2 ψ 2 (z2 ) + y0 x3 = u1 ν 1 (z3 ) + x0 y3 = u2 ν 2 (z3 ) + y0 (3.1) As escalas são contruidas de modo que a leitura no ábaco possa ser feita da seguinte maneira. Dados os valores de dois argumentos de F , por exemplo z1 e z2 , obtemos o terceiro z3 traçando a reta que passa pelo ponto de cota z1 da primeira escala e pelo ponto de cota z2 da segunda escala. O valor z3 correspondente é lido na terceira escala como a cota do ponto de interseção da reta com a terceira escala. Daí o nome de ábaco de pontos alinhados. 23 24 CHAPTER 3. EXEMPLOS: ÁBACOS DE PONTOS ALINHADOS A condição para que tres pontos (x1 , y1 ), (x2 , y2), (x3 , y3 ) pertençam a uma reta é x 1 y1 1 det x2 y2 1 = 0. x 3 y3 1 Substituindo as expressões 3.1, obtemos u1 ϕ1 (z1 ) + x0 u2 ϕ2 (z1) + y0 1 det u1 ψ1 (z2 ) + x0 u2 ψ 2 (z2 ) + y0 1 = 0 u1 ν 1 (z3) + x0 u2 ν 2 (z3 ) + y0 1 que após simplificação fica ϕ1 (z1 ) ϕ2 (z1 ) 1 det ψ 1 (z2 ) ψ2 (z2 ) 1 = 0 ν 1 (z3 ) ν 2 (z3) 1 (3.2) A equação 3.2 é a forma mais geral das equações F (z1 , z2 , z3) = 0 representáveis por ábacos de pontos alinhados. 3.2 Casos Particulares Conforme a natureza dos suportes das escalas, a equação F (z1 , z2 , z3 ) = 0 assume formas particulares: 1. Caso de tres retas paralelas Fazendo ϕ1 (z1) = δ1 , ψ1 (z2 ) = δ 2, δ1 ϕ2 (z1 ) det δ2 ψ 2 (z2) δ3 ν 2 (z3 ) ν 1 (z3 ) = δ 3, temos 1 1 = 1 = ϕ2 (z1 ) (δ 3 − δ 2) + ψ 2 (z2) (δ 1 − δ3 ) + ν 2 (z3) (δ2 − δ1 ) = 0 A forma canônica para este tipo de ábaco é então f (z1 ) + g (z2) + h (z3 ) = 0 3.2. CASOS PARTICULARES 25 2. Caso de duas retas paralelas e uma inclinada Fazendo ϕ1 (z1 ) = 0, 0 ϕ2 (z1 ) ψ2 (z2) det δ ν 1 (z3 ) m ν 1 (z3 ) ou ϕ2 (z1) ψ 1 (z2 ) = δ, ν 2 (z3) = m ν 1 (z3) , temos 1 1 = ϕ2 (z1 ) (ν 1 (z3 ) − δ)−ψ 2 (z2 ) ν 1 (z3 )+δ m ν 1 (z3 ) = 0 1 (ν 1 (z3 ) − δ) = ψ 2 (z2) − δ m ν 1 (z3 ) (3.3) A forma canônica para este tipo de ábaco é então f1 (z1 ) h (z3 ) = g (z2) 3. Caso de tres retas concorrentes Fazendo ϕ2 (z1 ) = m1 ϕ1 (z1 ) , ψ1 (z2 ) = m2 ψ1 (z2 ) , temos ϕ1 (z1 ) m1 ϕ1 (z1) 1 det ψ 1 (z2) m2 ψ 1 (z2 ) 1 = ν 1 (z3 ) m 3ν 1 (z3 ) 1 ν 2 (z3 ) = m3 ν 1 (z3 ), = m1 ϕ1 (z1) (ν 1 (z3 ) − ψ1 (z2 )) + m2 ψ 1 (z2 ) (ϕ1 (z1 ) − ν 1 (z3 )) + +m3 ν 1 (z3) (ψ1 (z2) − ϕ1 (z1 )) = 0 ou m3 − m2 m1 − m3 m2 − m1 + + =0 ϕ1 (z1) ψ 1 (z2 ) ν 1 (z3 ) A forma canônica para este tipo de ábaco é então 1 1 1 + + =0 f (z1 ) g (z2 ) h (z3) 4. Caso de duas retas paralelas e uma curva Fazendo ϕ1 (z1 ) = 0, ψ 1 (z2 ) = δ, temos 0 ϕ2 (z1 ) 1 det δ ψ2 (z2) 1 = ϕ2 (z1) (ν 1 (z3 ) − δ)−ψ 2 (z2 ) ν 1 (z3 )+δ ν 2 (z3 ) = 0 ν 1 (z3 ) ν 2 (z3 ) 1 26 CHAPTER 3. EXEMPLOS: ÁBACOS DE PONTOS ALINHADOS ou = ϕ2 (z1) − ψ 2 (z2 ) ν 1 (z3 ) δ ν 2 (z3 ) + =0 ν 1 (z3 ) − δ ν 1 (z3 ) − δ A forma canônica para este tipo de ábaco é então f (z1) + g (z2 ) h1 (z3 ) + h2 (z3) = 0 3.3 Exemplo: Ábaco para pV=RT Construir um ábaco de pontos alinhados para a equação dos gases perfeitos pV = nRT para n = 1 mol, onde p pressão em kP a (kilo Pascal) V volume em L (litro) R = 8, 3145 (constante universal) T temperatura em K o (graus Kelvin) Solução Comparando pV = RT com a forma canônica f (z1) h (z3) = g (z2) façamos z1 = p, z2 = T , z3 = V , e f (p) = 10 p g (T ) = −RT h (V ) = −V /10 A adaptação da equação dada à uma forma canônica não é única. Escolhemos aquela que julgamos mais conveniente, por experimentação. Êste foi o motivo, por exemplo, da escolha do sinal negativo nas definições de g e h, bem como dos fatores 10 e 1/10 nas definições de f e h. Comparando com a equação 3.3, temos ϕ2 (p) = f (p) = 10 p ψ2 (T ) − δ m = g (T ) = −RT (ν 1 (V ) − δ) /ν 1 (V ) = h (V ) = −V /10 3.3. EXEMPLO: ÁBACO PARA PV=RT donde 27 ϕ2 (p) = 10 p ψ 2 (T ) = δm − RT ν 1 (V ) = δ/ (1 + V /10) De acordo com as expressões 3.1 e 3.2, e lembrando que no caso de duas retas paralelas e uma com inclinação m temos ϕ1 (p) = 0, ψ1 (T ) = δ, ν 2 (V ) = m ν 1 (V ) , obtemos as equações das tres escalas funcionais x1 = x0 y1 = u2 10p + y0 x 2 = u1 δ + x 0 y2 = u2 (δm − RT ) + y0 x3 = u1 1+Vδ/10 + x0 mδ y3 = u2 1+V + y0 /10 Para que o ábaco caiba numa folha tamanho carta, escolhemos o comprimento das duas primeiras escalas igual a 200 mm, e a distância horizontal x2 − x1 entre elas igual a 125 mm, isto é, u1 δ = 125. Vamos adotar x0 = 0 e y0 = 0. Resulta 125 . x1 = 0, x2 = 125, e x3 = V 1 + 10 O valo máximo de y2 se dá para T = 0. Portanto 200 = u2 δm. Logo 200 y3 = V 1 + 10 Vamos variar T de 0 a 600. Para que y2 = u2 (δm − 600R) seja aproximadamente zero devemos ter δm − 600R ≈ 0, ou δm ≈ 600 × 8, 3145. Adotemos δm = 5.000. Então u2 = 200 ÷ 5.000 = 0, 04. Resulta y1 = 0, 4 p e y2 = 0, 04 (5000 − 8, 3145 T ) Vamos variar p de 0 a 500 e V de 0 a 100. As duas escalas verticais paralelas (cotas p e T ) são uniformes e portanto sem pontos de cesura. 28 CHAPTER 3. EXEMPLOS: ÁBACOS DE PONTOS ALINHADOS Escolhemos os pontos de cesura da terceira escala (cota V ) por meio do programa Cesuras. Obtemos a tabela Cesura P asso 0, 0 0, 9 5, 3 14, 3 24, 3 38, 3 68, 3 98, 3 0, 1 0, 2 0, 5 1, 0 2, 0 5, 0 10, 0 20, 0 Cesura P asso 0, 0 1, 0 5, 0 15, 0 20, 0 40, 0 60, 0 100, 0 0, 1 0, 2 0, 5 1, 0 2, 0 5, 0 10, 0 − que depois de ajustada fica Para a construção da escala de cotas V introduzimos a classe VolumeScaleData, a seguir, que implementa a interface CadScale.ScaleData. package cadscale; class VolumeScaleData implements CadScale.ScaleData { public VolumeScaleData() { } public boolean isStraightLine() { return true; } public double getStartCota() { 3.3. EXEMPLO: ÁBACO PARA PV=RT 29 return 0.0; } public double getEndCota() { return 100.0; } public double[ ][ ] getCesurasTable() { return new double[ ][ ] {{ 0.0, 0.1, 10 }, { 1.0, 0.2, 5 }, { 5.0, 0.5, 2 }, { 15.0, 1.0, 5 }, { 20.0, 2.0, 5 }, { 40.0, 5.0, 2 }, { 60.0, 10.0, 2 }, { 100.0, 0.0, 0 }}; } public double g1(double a) { return 1250/(10+a); } public double g2(double a) { return 2000/(10+a); } public int getNumberOfDecimals() { return 0; } public int getFontSize() { return 20; } public double getAdjustmentFactor() { return -0.8; } } Para a construção da escala de cotas p introduzimos a classe PressureScaleData, a seguir, que implementa a interface CadScale.ScaleData. package cadscale; 30 CHAPTER 3. EXEMPLOS: ÁBACOS DE PONTOS ALINHADOS class PressureScaleData implements CadScale.ScaleData { public PressureScaleData() { } public boolean isStraightLine() { return true; } public double getStartCota() { return 0.0; } public double getEndCota() { return 500.0; } public double[ ][ ] getCesurasTable() { return new double[ ][ ] {{ 0.0, 5, 5 }, { 500.0, 0, 0 }}; } public double g1(double a) { return 0.0; } public double g2(double a) { return 0.4*a; } public int getNumberOfDecimals() { return 0; } public int getFontSize() { return 20; } public double getAdjustmentFactor() { return 1; } } Para a construção da escala de cotas T introduzimos a classe TemperatureScaleData, que implementa a interface CadScale.ScaleData. 3.3. EXEMPLO: ÁBACO PARA PV=RT package cadscale; class TemperatureScaleData implements CadScale.ScaleData { public TemperatureScaleData() { } public boolean isStraightLine() { return true; } public double getStartCota() { return 0.0; } public double getEndCota() { return 600.0; } public double[ ][ ] getCesurasTable() { return new double[ ][ ] {{ 0.0, 5, 5 }, { 600.0, 0, 0 }}; } public double g1(double a) { return 125.0; } public double g2(double a) { return 0.04*(5000 - 8.3145*a); } public int getNumberOfDecimals() { return 0; } public int getFontSize() { return 20; } public double getAdjustmentFactor() { return -0.8; } } 31 32 CHAPTER 3. EXEMPLOS: ÁBACOS DE PONTOS ALINHADOS Após compilar as classes VolumeScaleData, PressureScaleData e TemperatureScaleData, executamos sucessivamente o programa CadScale, tendo como argumentos “VolumeScaleData”, “PressureScaleData” e “TemperatureScaleData”. Em cada execução é gerado um arquivo de objetos gráficos para uma das escalas. Batizamos estes arquivos volume.obj, pressure.obj e temperature.obj. Usamos agora o programa genérico de desenho Cadinho para obter o desenho do ábaco, carregando sucessivamente os tres arquivos de extensão obj pelo comando Load Objects do Cadinho. Pelo Cadinho incluimos título, borda e textos, e imprimimos o desenho do ábaco com o comando Print, obtendo a figura 3.1. 3.3. EXEMPLO: ÁBACO PARA PV=RT Figure 3.1: Ábaco para pV=RT 33