Untitled

 avatar
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...