Sen, Cos e Tan

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

Avatar do usuário
Ricardo Sales Ribeiro
Usuário Nível 3
Usuário Nível 3
Mensagens: 279
Registrado em: 13 Jul 2004 18:06
Localização: Fortaleza-Ceara

Sen, Cos e Tan

Mensagem por Ricardo Sales Ribeiro »

Olá
Boa Tarde Amigos

Preciso de uma ajuda dos amigos, um cliente me pediu para gerar uma rotina, onde são calculadas algumas formulas,
até aí tudo bem, só, +-/* beleza, mas agora estar envolvido nas formulas, Sen,Cos e tan, como posso executar essas formulas? Inclusive cos ao cubo.
Onde posso conseguir uma tabela com esses valores, e como acessa-los.


Atenciosamente
Ricardo Sales
Fortaleza-Ce
lodara53@yahoo.com.br
lodara53@hotmail.com
Avatar do usuário
Eolo
Colaborador
Colaborador
Mensagens: 1134
Registrado em: 08 Dez 2005 18:24
Localização: São Paulo - SP

Sen, Cos e Tan

Mensagem por Eolo »

Essas funções vc encontra nas LIBs da CATools (CT52, CTP52, CT53, CTP53... dependendo de qual Clipper vc tá usando e do modo protegido ou não).
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

Sen, Cos e Tan

Mensagem por alxsts »

Olá!

Como você ainda usa Clipper, não terá essas funções nativamente na linguagem. Será necessário apenas utilizar (linkar) uma biblioteca externa que forneça as funções que você precisa. Um exemplo é a CA-Tools, cujo NG pode ser visto aqui. Neste guia, consulte Book 3, 4 - Mathematical Functions.
[]´s
Alexandre Santos (AlxSts)
Avatar do usuário
billy1943
Usuário Nível 4
Usuário Nível 4
Mensagens: 570
Registrado em: 12 Mai 2009 17:33
Localização: Bauru-SP

Sen, Cos e Tan

Mensagem por billy1943 »

Como ainda não sei se o Ricardo já solucionou suas questões com SENO, COSSENO, etc., venho questionar como usar as funções da
CA-Tools, senão vejamos:

a) se entrarmos na calculadora do Windows, e informarmos o grau 30, ela responderá com os seguintes valores:

1. SENO = 0.5000000000
2. COSSENO = 0.8660254037...

Ou seja, o seno e cosseno serão informados como as projeções que terá um triângulo retângulo, por exemplo, cuja hipotenusa
mede 100,00 metros, o cateto oposto ao ângulo de 30 graus medirá 50,00 metros e o cateto oposto ao ângulo de 60 graus medirá
86,60 metros.

Tudo confere com as premissas da topografia onde seno e cosseno são usados à exaustão no cálculo de poligonais fechadas.
Inclusive eu tenho outras formas de conseguir os valores de seno e cosseno usando cálculo infinitesimal, que apresentei há tempos
com o título "Do que o Clipper é capaz", no link abaixo

viewtopic.php?f=43&t=12972


Como não consegui os mesmos valores testando as funções da LIB CT52, ou seja, gostaria de saber o que devo ou como devo informar como parâmetro nas funções ACOS, ASIN, SIN e COS, mesmo que tenha de inserir o valor do PI ?

Fiz um pequeno programa para usar as citadas e como apareceram resultados improváveis ou esdrúxulos, e que poderia servir
para quem quer se aventurar pelas funções matemáticas da citada LIB, e que exponho abaixo e que conto com a ajuda dos
colegas Clippeiros para solucioná-lo:

Código: Selecionar todos

*****************************************************************
* calculo de seno e cosseno para uso em topografia;
* sao informados: grau, minutos e segundos do angulo;
*****************************************************************
local ngrau, nminuto, nsegundo, totseg
local nseno, ncosseno, naseno, nacosseno
setcolor("w+/b,g+/n,,,bg+/b")
clear
@ 5,15 say " CALCULO DE SENO E COSSENO DE UM ANGULO "
setprec(16)

do while .t.

   @ 10,10 clear to 20,70
   ngrau := nminuto := nsegundo := 0 
   @ 10,10 say "Informe o grau...: " get ngrau pict "99" valid ngrau < 91
   read

   if lastkey() == 27
      exit
   endif

   if ngrau < 90
      @ 11,10 say "Informe minutos..: " get nminuto pict "99" ;
              valid nminuto < 60 
      read
      if nminuto < 60
         @ 12,10 say "Informe segundos.: " get nsegundo pict "99" ;
                 valid nsegundo < 60 
         read
      endif
   endif

   if ngrau == 0 .and. nminuto == 0 .and. nsegundo == 0
      loop
   endif

   if lastkey() == 27
      exit
   endif

   totseg := nminuto * 60        // apura segundos dos minutos
   totseg += nsegundo             // soma segundos
   totseg /= 3600                   // converte para decimal de grau
   ngrau  += totseg                 // adiciona aos graus 
   ngrau  /= 100                     // converte para decimal

   @ 15,10 say "Grau convertido ..: " 
   @ 15,col()+1 say ngrau pict "@E #.###############"
   inkey(0)
   naseno := asin(ngrau)
   @ 16,10 say "Arco Seno do angulo ...: "
   @ 16,col()+1 say naseno pict "@E #.###############" color "gr+/b"
   inkey(0)
   nacosseno := acos(ngrau)
   @ 17,10 say "Arco Cosseno do angulo.: "
   @ 17,col()+1 say nacosseno pict "@E #.###############" color "gr+/b"
   nseno := sin(ngrau)
   @ 18,10 say "Seno do angulo ........: "
   @ 18,col()+1 say nseno pict "@E #.###############" color "gr+/b"
   inkey(0)
   ncosseno := cos(ngrau)
   @ 19,10 say "Cosseno do angulo .....: "
   @ 19,col()+1 say ncosseno pict "@E #.###############" color "gr+/b"
   inkey(0)
   @ 24,10 say "Tecle algo para outro calculo" color "gr+/b"
   inkey(0)
   @ 24,0

enddo

return
 
O bom do computador é que ele resolve os problemas, sem nunca levantar nenhum.
Hoje atuo mais com Clipper 52E, e um pouquinho com XHarbour.
Avatar do usuário
Ricardo Sales Ribeiro
Usuário Nível 3
Usuário Nível 3
Mensagens: 279
Registrado em: 13 Jul 2004 18:06
Localização: Fortaleza-Ceara

Sen, Cos e Tan

Mensagem por Ricardo Sales Ribeiro »

Amigo Billy
Boa Noite

Ainda não resolvi amigo, tenho uma tabela num livro antigo, que me dá esse resultado, me da uma tabela de 0 grau a 89
e variando cada grau de 0 a 59 minutos, terei que criar um banco com todos esses valores, tipo:
3 Graus e 10 minutos teremos seno: 0,05524 cos: 0,99847 e tan: 0,05533. É uma tarefa árdua, muita digitação, eu estou atrás de uma formula onde eu entre com grau e minuto, e essa formula gera sem, cos e tan.

Já procurei na internet e ninguém sabe, por exemplo, como essa tabela foi gerada, acredito que tenha sido, ou tenha partido de uma formula.

Tb na internet tive informações de que esses valores não são calculados e sim, consultados nessa dita tabela (Tábua de Logaritmos) Valores naturais de minuto a minuto com 5 ordens decimais.

Eu não acredito que não exista uma formula matemática, que eu possa usar no clipper para gerar esses valores,

Esses valores são para cálculos para fazer peças numa oficina de torno mecânico.

Boa noite

Aguardo ajuda,
Ricardo Sales
Fortaleza-Ce
lodara53@yahoo.com.br
lodara53@hotmail.com
Avatar do usuário
bencz
Usuário Nível 4
Usuário Nível 4
Mensagens: 524
Registrado em: 28 Abr 2012 17:36
Contato:

Sen, Cos e Tan

Mensagem por bencz »

bom, vcs estão equecendo dos angulos notaveis ??

para calcular o seno de um numero X: formula -> sen x = sen(180º - x)
sen 120º = sen (180º – 120º) → sen 120º = sen 60º = 0,8660

Mas, infelizmente acabamos caindo em um problema muito sério com isso:
como calular o seno de 87, por exemplo ?
ai q tah o B.O da coisa..... vamos a boa e velha matematica q eu amo muito <3

1 grau= 1.PI/180=0,0174532292, que é aproximadamente igual ao sen(1)=0,017452406.
Considerando sen(1)=0,017453, podemos calcular o cos(1):
cos(1)=raiz[1-sen²(1)]=0,999847684 que é aproximadamente igual a cos(1)=0,999847695.
Considerando sen(1)=0,017453 e cos(1)=0,9998476, podemos calcular sen(2):
sen(2)=2.sen(1).cos(1)=0,034900683
que é aproximadamente igual a sen(2)=0,034899496
cos(2)=raiz[1-sen²(2)]=0,999390785
sen(4)=2.sen(2).cos(2)=0,069757
cos(4)=raiz[1-sen²(4)]=0,997564
sen(5)=sen(4+1)=
=sen(4).cos(1)+sen(1).cos(4)=
=0,087156853

cos(87)=raiz[1-sen²(87)]=0.052335956242943832722118629609078418731018253940164920483509...
tan(87)=sen(87)/cos(87)=19.08113668772821106340674873436534930825096121811126583909597...
sec(87)=1/cos(87)=19.10732260929739799229611256165987305263899111575850428021944...
cossec(87)=1/sen(87)=-0.18331585713442349235924747500965503444774295707300056036709... r

Feito ;)
Imagem
Avatar do usuário
bencz
Usuário Nível 4
Usuário Nível 4
Mensagens: 524
Registrado em: 28 Abr 2012 17:36
Contato:

Sen, Cos e Tan

Mensagem por bencz »

Em caso de duvidas maiores, use a série de Taylor, ela serve para isso (:

http://en.wikipedia.org/wiki/Taylor_series

Código: Selecionar todos

function main()
	? cos(90)
	? cos(87)
return nil

function cos( x )
	local p := x * x
	local q := p * p
	return 1.0 - p / 2 + q / 24 - p * q / 720 + q * q / 40320 - p * q * q / 3628800
Não testei....
Imagem
Avatar do usuário
Ricardo Sales Ribeiro
Usuário Nível 3
Usuário Nível 3
Mensagens: 279
Registrado em: 13 Jul 2004 18:06
Localização: Fortaleza-Ceara

Sen, Cos e Tan

Mensagem por Ricardo Sales Ribeiro »

Caro amigo Bencz
Boa noite

Agradeço a sua colaboração, mas continuo na mesma, desculpe mas não consegui entender.
Veja se vc consegue montar uma formula para calcular o sem, cos e a tan, para 3 graus e 10 minutos, o resultado estar na minha
postagem acima.

Obrigado
Ricardo Sales
Fortaleza-Ce
lodara53@yahoo.com.br
lodara53@hotmail.com
Avatar do usuário
bencz
Usuário Nível 4
Usuário Nível 4
Mensagens: 524
Registrado em: 28 Abr 2012 17:36
Contato:

Sen, Cos e Tan

Mensagem por bencz »

Por favor, poderia verificar se o exemplo está correto ?
o unico que bateu os valores foi para o cosseno, o resto deu tudo diferença aqui

/***/

Desculpe-me, fui eu que errei, a formula é simples jovem (:
Primeiro de tudo, precisamos converter o seu input para decimal.
decimal = graus + Mimutos/60 + Segundos/3600
Então, tendo o valor do decimal, basta calcular o seno, cosseno e a tangente deste valor (:

por exemplo:

Código: Selecionar todos

INPUT: 3º 10' 0''
decimal = 3 + 10/60 + 0/3600

cos(3 + 10/60 + 0/3600) = 0.998473070847311322698818416800919455676949645116884248952285...
sen(3 + 10/60 + 0/3600) = 0.055240626288448468679203448486392370696958332390661577361321...
tan(3 + 10/60 + 0/3600) = 0.055325103802319757905949798225302634480747598655385418355659...
Imagem
Avatar do usuário
bencz
Usuário Nível 4
Usuário Nível 4
Mensagens: 524
Registrado em: 28 Abr 2012 17:36
Contato:

Sen, Cos e Tan

Mensagem por bencz »

Caso queira tentar com uma tabela, fiz uma aqui, rapidinho...
o arquivo CSV segue no seguinte padrão:

angulo, cosseno, seno, tangente

o angulo está formatado da seguinte forma:
00g00m00s
onde:
g => graus
m => minutos
s => segundos
Anexos
valores.zip
(161.69 KiB) Baixado 220 vezes
Imagem
Avatar do usuário
billy1943
Usuário Nível 4
Usuário Nível 4
Mensagens: 570
Registrado em: 12 Mai 2009 17:33
Localização: Bauru-SP

Sen, Cos e Tan

Mensagem por billy1943 »

Para quem gosta de Clipper, segue a rotina, e que informa os valores de seno e cosseno, para qualquer ângulo, informados em
graus, minutos e segundos:

Código: Selecionar todos

**********************************************************************
* calculo de seno e cosseno para uso em topografia;
* sao informados: grau, minuto e segundo do angulo;
* esses valores sao usados posteriormente juntamente com
* o quadrante (NE, SE, SW e NW) e a distancia entre as
* medicoes, para o calculo da poligonal fechada
* o calculo utiliza o PI e o fatorial dos expoentes
**********************************************************************
local ngrau, nminuto, nsegundo, totseg
local nseno, ncose, dimin, aumen
setcolor("w+/b,g+/n,,,bg+/b")
clear
@ 5,15 say " CALCULO DE SENO E COSSENO DE UM ANGULO "
set decimal to 14

do while .t.

   @ 10,10 clear to 16,70
   ngrau := nminuto := nsegundo := 0 
   @ 10,10 say "Informe o grau...: " get ngrau pict "99" valid ngrau < 91
   read

   if lastkey() == 27
      exit
   endif

   if ngrau < 90
      @ 11,10 say "Informe minutos..: " get nminuto pict "99" ;
              valid nminuto < 60 
      read
      if nminuto < 60
         @ 12,10 say "Informe segundos.: " get nsegundo pict "99" ;
                 valid nsegundo < 60 
         read
      endif
   endif

   if ngrau == 0 .and. nminuto == 0 .and. nsegundo == 0
      loop
   endif

   if lastkey() == 27
      exit
   endif

   **********************************************************
   // formula = x - (x^3/3!) + (x^5/5!) - (x^7/7!) + ......    // [b]esta é a formula do seno[/b]
   **********************************************************
   totseg := nminuto * 60        // apura segundos dos minutos
   totseg += nsegundo            // soma segundos
   totseg /= 3600                // converte para decimal de grau
   ngrau  += totseg              // adiciona aos graus 
   ngrau  *= (3.14159265358979 / 180) // transforma graus em comprimento arco

   nseno  := ngrau               // ponto de partida do grau
   dimin  := (ngrau ** 3) / 6    // 
   nseno  -= dimin
   aumen  := (ngrau ** 5) / 120
   nseno  += aumen
   dimin  := (ngrau ** 7) / 5040
   nseno  -= dimin
   aumen  := (ngrau ** 9) / 362880
   nseno  += aumen
   dimin  := (ngrau ** 11) / 39916800
   nseno  -= dimin
   aumen  := (ngrau ** 13) / 6227020800
   nseno  += aumen
   @ 14,10 say "Seno encontrado..: " + transform(nseno,"@E #.##############")

   *****************************************************************
   // formula = 1 - (x^2/2!) + (x^4/4!) - (x^6/6!) + (x^8/8!) ...   [b] // esta é a formula do cosseno [/b]
   *****************************************************************

   ncose  := 1
   dimin  := (ngrau ** 2) / 2
   ncose  -= dimin
   aumen  := (ngrau ** 4) / 24 
   ncose  += aumen
   dimin  := (ngrau ** 6) / 720 
   ncose  -= dimin
   aumen  := (ngrau ** 8) / 40320 
   ncose  += aumen
   dimin  := (ngrau ** 10) / 3628800 
   ncose  -= dimin
   aumen  := (ngrau ** 12) / 47900160 
   ncose  += aumen
   dimin  := (ngrau ** 14) / 87178291200 
   ncose  -= dimin
   @ 24,10 say "Tecle algo para outro calculo" color "gr+/b"
   @ 16,10 say "Cosseno encontrado: " + transform(ncose,"@E #.##############")
   inkey(0)
   @ 24,0

enddo

return
 


Observações: essas fórmulas eu utilizei em um programa de cálculo de topografia de área de uma poligonal fechada,
sem limite do número das medições, baseada na planilha do levantamento nos rumos azimutais, e que corrige o fechamento quando a diferença for inferior a 30 metros.
Esse levamento produz resultado da área em ha,a,ca, bem como informa os valores nos eixos X e Y para o desenho correspondente.
Tudo feito em Clipper.
A primeira vez que tomei ciência desses cálculos foi num equipamento Burroughs L5000, com 10KB de memória, com programa
em Assembler, que levava mais ou menos 20 segundos para cada seno e cosseno, e, às vezes tínhamos áreas com 200 medições.
O negócio era digitar as medições e deixar a máquina trabalhando por horas, rsrsrs...
O bom do computador é que ele resolve os problemas, sem nunca levantar nenhum.
Hoje atuo mais com Clipper 52E, e um pouquinho com XHarbour.
Avatar do usuário
bencz
Usuário Nível 4
Usuário Nível 4
Mensagens: 524
Registrado em: 28 Abr 2012 17:36
Contato:

Sen, Cos e Tan

Mensagem por bencz »

Haha, e para quem já curte algo mais avançado ( apenas para fugir um pouquinho do tema... da linguagem)
Imagem
Avatar do usuário
billy1943
Usuário Nível 4
Usuário Nível 4
Mensagens: 570
Registrado em: 12 Mai 2009 17:33
Localização: Bauru-SP

Sen, Cos e Tan

Mensagem por billy1943 »

Quase que respondendo ao que solicitei acima, verifiquei a forma de calcular o Seno, Cosseno e Tangente, utilizando as funções matemáticas da LIB CA-Tools.(usei a CT52)

Assim, segue a rotina em Clipper resolvendo também os ítens desejados, desde que informados os graus, minutos e segundos.
Divirtam-se.

Código: Selecionar todos

********************************************************
* calculo de seno e cosseno para uso em topografia;
* sao informados: grau, minuto e segundo do angulo;
*******************************************************
local ngrau, nminuto, nsegundo, totseg
local nseno, ncosseno, ntangente, dimin, aumen
setcolor("w+/b,g+/n,,,bg+/b")
clear
@ 5,10 say " CALCULO DE SENO, COSSENO E TANGENTE DE UM ANGULO USANDO LIB CT52 "
setprec(16)
set decimal to 15

do while .t.

   @ 10,10 clear to 20,70
   ngrau := nminuto := nsegundo := 0 
   @ 10,10 say "Informe o grau...: " get ngrau pict "99" valid ngrau < 91
   read

   if lastkey() == 27
      exit
   endif

   if ngrau < 90
      @ 11,10 say "Informe minutos..: " get nminuto pict "99" ;
              valid nminuto < 60 
      read
      if nminuto < 60
         @ 12,10 say "Informe segundos.: " get nsegundo pict "99" ;
                 valid nsegundo < 60 
         read
      endif
   endif

   if ngrau == 0 .and. nminuto == 0 .and. nsegundo == 0
      loop
   endif

   if lastkey() == 27
      exit
   endif

   totseg := nminuto * 60        // apura segundos dos minutos
   totseg += nsegundo            // soma segundos
   totseg /= 3600                // converte para decimal de grau
   ngrau  += totseg              // adiciona aos graus 
   @ 15,10 say "Grau convertido .......: " 
   @ 15,col()+1 say ngrau pict "@E ##.########" color "g+/b"
   x := 180 / ngrau
   y := 3.141592653589793 / x     // obtém o valor em radianos
   nseno := sin(y)                         // usa a função SIN 
   @ 16,10 say "Seno do angulo ........: "
   @ 16,col()+1 say nseno     pict "@E #.###############" color "gr+/b"
   ncosseno := cos(y)                   // usa a função COS
   @ 17,10 say "Cosseno do angulo .....: "
   @ 17,col()+1 say ncosseno  pict "@E #.###############" color "gr+/b"
   ntangente := tan(y)                 // usa a função TAN
   @ 18,10 say "Tangente do angulo ....: "
   @ 18,col()+1 say ntangente  pict "@E #.###############" color "gr+/b"
   @ 24,10 say "Tecle algo para outro calculo" color "gr+/b"
   inkey(0)
   @ 24,0

enddo

return
O bom do computador é que ele resolve os problemas, sem nunca levantar nenhum.
Hoje atuo mais com Clipper 52E, e um pouquinho com XHarbour.
Avatar do usuário
bencz
Usuário Nível 4
Usuário Nível 4
Mensagens: 524
Registrado em: 28 Abr 2012 17:36
Contato:

Sen, Cos e Tan

Mensagem por bencz »

para calcular o seno, cosse, basta utilizar a série de taylor...
Imagem
Avatar do usuário
billy1943
Usuário Nível 4
Usuário Nível 4
Mensagens: 570
Registrado em: 12 Mai 2009 17:33
Localização: Bauru-SP

Sen, Cos e Tan

Mensagem por billy1943 »

O amigo Bencz disse:
Não testei....
As séries citadas pelo Bencz para o caso de seno e cosseno, foram por mim testadas e são as constantes do meu exemplo em tópico acima, sem o uso das funções da LIB CT52.

SENO
**********************************************************
// formula = x - (x^3/3!) + (x^5/5!) - (x^7/7!) + ...... obs: no seno eu parei no número 13
**********************************************************

COSSENO
*****************************************************************
// formula = 1 - (x^2/2!) + (x^4/4!) - (x^6/6!) + (x^8/8!) ... Obs: no cosseno eu parei no número 12
*****************************************************************

Aproveito para pedir novamente ao Ricardo, que iniciou este tópico, se já solucionou o seu problema, pois ainda não se ele vai
trabalhar com radianos ou com projeções, no seu fabrico de peças.
O bom do computador é que ele resolve os problemas, sem nunca levantar nenhum.
Hoje atuo mais com Clipper 52E, e um pouquinho com XHarbour.
Responder