Untitled
unknown
dart
3 years ago
4.7 kB
3
Indexable
//import 'package:decimal/decimal.dart'; import 'package:big_decimal/big_decimal.dart'; int escala = 200; facaCalculo(int numIteracoes) { var resultado = [ {'tempo': 0.0, 'velocidade': 0}, ]; setInitialValues(); BigDecimal tempoDecorrido = BigDecimal.parse('0'); for (int i = 0; i < numIteracoes; i++) { BigDecimal tempoParaColisaoBolaComPB = PAarremessaBola(); bolaViajaParaPB(tempoParaColisaoBolaComPB); bolaColideComPB(); BigDecimal tempoParaColisaoBolaComPA = PBarremessaBola(); bolaViajaParaPA(tempoParaColisaoBolaComPA); bolaColideComPA(); tempoDecorrido = tempoDecorrido + tempoParaColisaoBolaComPB + tempoParaColisaoBolaComPA; //print('${velocidadePB}'); //print(''); if (i % (numIteracoes / 1000) == 0) { print('veloc PB: ${velocidadePB}'); resultado.add( { 'tempo': tempoDecorrido.toDouble(), 'velocidade': velocidadePB.toDouble(), }, ); } // } print('fiz o calculo!'); return resultado; } //------------------------------------------------------------------------- //------------------------------------------------------------------------- BigDecimal PAarremessaBola() { velocidadePA = velocidadePA - (forcaAplicada.divide( massaPA, scale: escala, roundingMode: RoundingMode.CEILING, )); velocidadeBola = velocidadeBola + (forcaAplicada.divide( massaBola, scale: escala, roundingMode: RoundingMode.CEILING, )); BigDecimal retorno = (posicaoPB - posicaoPA).divide( velocidadeBola - velocidadePB, roundingMode: RoundingMode.CEILING, scale: escala, ); return retorno; } bolaViajaParaPB(BigDecimal deltaT) { posicaoPA = posicaoPA + velocidadePA * deltaT; posicaoPB = posicaoPB + velocidadePB * deltaT; } bolaColideComPB() { velocidadeBola = (massaBola * velocidadeBola + massaPB * velocidadePB).divide( massaBola + massaPB, scale: escala, roundingMode: RoundingMode.CEILING, ); velocidadePB = velocidadeBola; } //------------------------------------------------------------------------- //------------------------------------------------------------------------- //------------------------------------------------------------------------- //------------------------------------------------------------------------- BigDecimal PBarremessaBola() { velocidadeBola = velocidadeBola - forcaAplicada.divide( massaBola, scale: escala, roundingMode: RoundingMode.CEILING, ); velocidadePB = velocidadePB + forcaAplicada.divide( massaPB, scale: escala, roundingMode: RoundingMode.CEILING, ); return BigDecimal.parse('-1') * (posicaoPB - posicaoPA).divide( velocidadeBola - velocidadePA, scale: escala, roundingMode: RoundingMode.CEILING, ); } bolaViajaParaPA(BigDecimal deltaT) { posicaoPA = posicaoPA + velocidadePA * deltaT; posicaoPB = posicaoPB + velocidadePB * deltaT; } bolaColideComPA() { velocidadeBola = (massaBola * velocidadeBola + massaPA * velocidadePA).divide( massaBola + massaPA, scale: escala, roundingMode: RoundingMode.CEILING, ); velocidadePA = velocidadeBola; } //------------------------------------------------------------------------- //------------------------------------------------------------------------- setInitialValues() { //massa do eletron massaPA = BigDecimal.parse( '0.000000000000000000000000000000000911', ); //massa do foton massaPB = BigDecimal.parse( '0.000000000000000000000000000000000911', ); massaBola = BigDecimal.parse( '0.000000000000000000000000000000000000000000000004', ); velocidadePA = BigDecimal.parse('0'); velocidadePB = BigDecimal.parse('0'); velocidadeBola = BigDecimal.parse('0'); posicaoPA = BigDecimal.parse('-1'); posicaoPB = BigDecimal.parse('1'); //energia de um foton: +- 3 x 10−19 J forcaAplicada = BigDecimal.parse('0.0000000000000000000000000000000023'); } BigDecimal massaPA = BigDecimal.parse('0'); BigDecimal massaPB = BigDecimal.parse('0'); BigDecimal massaBola = BigDecimal.parse('0'); BigDecimal velocidadePA = BigDecimal.parse('0'); BigDecimal velocidadePB = BigDecimal.parse('0'); BigDecimal velocidadeBola = BigDecimal.parse('0'); BigDecimal posicaoPA = BigDecimal.parse('0'); BigDecimal posicaoPB = BigDecimal.parse('0'); BigDecimal forcaAplicada = BigDecimal.parse('0');
Editor is loading...