moveTowards method

Vector4D moveTowards(
  1. Vector4D target,
  2. double maxDistance
)

Implementation

Vector4D moveTowards(Vector4D target, double maxDistance) {
  final dx = target.x - x;
  final dy = target.y - y;
  final dz = target.z - z;
  final dw = target.w - w;
  final value = (dx*dx) + (dy*dy) + (dz*dz) + (dw*dw);

  if (
    (value == 0) ||
    ((maxDistance >= 0) && (value <= maxDistance*maxDistance))
  ) return target;

  final dist = math.sqrt(value);

  return .vec4(
    x + dx/dist*maxDistance,
    y + dy/dist*maxDistance,
    z + dz/dist*maxDistance,
    w + dw/dist*maxDistance,
  );
}