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