Untitled
unknown
dart
3 years ago
4.7 kB
4
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...