call method

  1. @override
void call(
  1. Particle particleA,
  2. Particle particleB,
  3. Particle particleC
)
override

Implementation

@override
void call(Particle particleA, Particle particleB, Particle particleC) {
  final pa = particleA.position;
  final pb = particleB.position;
  final pc = particleC.position;
  final dabx = pa.x - pb.x;
  final daby = pa.y - pb.y;
  final dbcx = pb.x - pc.x;
  final dbcy = pb.y - pc.y;
  final dcax = pc.x - pa.x;
  final dcay = pc.y - pa.y;
  final maxDistanceSquared =
      settings.maxTriadDistanceSquared * system.squaredDiameter;
  if (dabx * dabx + daby * daby < maxDistanceSquared &&
      dbcx * dbcx + dbcy * dbcy < maxDistanceSquared &&
      dcax * dcax + dcay * dcay < maxDistanceSquared) {
    final midPointX = 1.0 / 3.0 * (pa.x + pb.x + pc.x);
    final midPointY = 1.0 / 3.0 * (pa.y + pb.y + pc.y);
    final triad = PsTriad(particleA, particleB, particleC)
      ..flags = particleA.flags | particleB.flags | particleC.flags
      ..strength = def.strength
      ..pa.x = pa.x - midPointX
      ..pa.y = pa.y - midPointY
      ..pb.x = pb.x - midPointX
      ..pb.y = pb.y - midPointY
      ..pc.x = pc.x - midPointX
      ..pc.y = pc.y - midPointY
      ..ka = -(dcax * dabx + dcay * daby)
      ..kb = -(dabx * dbcx + daby * dbcy)
      ..kc = -(dbcx * dcax + dbcy * dcay)
      ..s = pa.cross(pb) + pb.cross(pc) + pc.cross(pa);
    system.triadBuffer.add(triad);
  }
}