logTicks function

List<double> logTicks(
  1. double start,
  2. double stop,
  3. int count, [
  4. double base = 10,
])

Generates tick values for a log scale.

Implementation

List<double> logTicks(double start, double stop, int count,
    [double base = 10]) {
  final logs = math.log(base);
  var u = start;
  var v = stop;

  final r = v < u;
  if (r) {
    final temp = u;
    u = v;
    v = temp;
  }

  var i = (math.log(u) / logs).floor();
  final j = (math.log(v) / logs).ceil();

  final ticks = <double>[];

  if (base % 1 == 0) {
    final k = base.toInt();
    if (j - i < count) {
      for (; i <= j; ++i) {
        for (int p = 1; p < k; ++p) {
          double t;
          if (i < 0) {
            t = p / math.pow(base, -i);
          } else {
            t = p * math.pow(base, i).toDouble();
          }
          if (t < u) continue;
          if (t > v) break;
          ticks.add(t);
        }
      }
    } else {
      for (; i <= j; ++i) {
        ticks.add(math.pow(base, i).toDouble());
      }
    }
  } else {
    for (; i <= j; ++i) {
      ticks.add(math.pow(base, i).toDouble());
    }
  }

  return r ? ticks.reversed.toList() : ticks;
}