Как бы вы нарисовали / оживили путь, напоминающий электричество во Флаттере? - PullRequest
0 голосов
/ 12 апреля 2020

Код ниже является частью метода

void paint(Canvas canvas, Size size) {}

.

Я определил класс Point следующим образом:

class Point {
  int x;
  int y;
  double distanceFromO;
  Offset offset;
  Point(this.x, this.y) {
    distanceFromO = Offset(x.toDouble(), y.toDouble()).distance;
    offset = Offset(x.toDouble(), y.toDouble());
  }

  Offset getOff() {
    return offset;
  }
}

Этот алгоритм / код проверяет, находится ли следующая последовательная точка над ним, и рисует только в этом случае. Как мне заставить его путешествовать случайным образом и всегда начинать и заканчивать с двух фиксированных точек, а также делать его более похожим на электричество (заметное и динамичное c количество расстояний между координатами x и y точек)?

for (int i = 0; i < 35000; i++) {
      var x = Random().nextInt(400);
      var y = Random().nextInt(400);
      Point temp = new Point(x, y);

      for (int j = 0; j < points.length; j++) {
        if (temp.y - points[j].y > 0 ||
            temp.x - points[j].x > 100 && temp.x - points[j].x < 200 ||
            temp.y - points[j].y > 100 && temp.y - points[j].y < 200)
          isBiggestPoint = false;
      }

      if (isBiggestPoint) points.add(temp);
      isBiggestPoint = true;
    }
    points.forEach(
        (p) => print('x' + p.x.toString() + ' ' + 'y' + p.y.toString()));

    points.sort((a, b) {
      int cmp = b.y.compareTo(a.y);
      if (cmp != 0) return cmp;
      return b.x.compareTo(a.x);
    });
//debug print
    points.forEach(
        (p) => print('x' + p.x.toString() + ' ' + 'y' + p.y.toString()));

    for (int k = 1; k < points.length; k++) {
      canvas.drawLine(points[k - 1].getOff(), points[k].getOff(), tpaint);
    }

Токовый выход: enter image description here

Ожидаемый выход: enter image description here

Заранее спасибо

...