Вызов асинхронного метода из конструктора компонента в Dart

Во-первых, вот некоторые начальные тестовые переменные, в том числе ускорение из-за силы тяжести:

g = 9.8; %// m/s^2
v0 = 2; %// m/s
alpha = pi/6; %// Radians
h = 30; %// Start at 30 metres
t_final = 4.5; %// Seconds
t_vector = 0 : 0.01 : t_final;

t_vector в последней строке кода создает вектор точек с начального времени t = 0 до нашего времени окончания с шагом 0,01. С учетом этого наша задача состоит в том, чтобы пройти каждый из этих точек в нашем векторе и построить наш шар. Затем создадим анонимные функции для каждого x и y, чтобы сделать наш график проще:

x = @(t) v0*cos(alpha)*t;
y = @(t) h + v0*sin(alpha)*t - 0.5*g*t.^2;

. Что вы можете сделать дальше, это использовать цикл for и пройти каждое значение t_vector до t_final и нарисуйте отдельную точку. Вероятно, вы должны сделать так, чтобы мы могли видеть, как выглядит мяч:

close all;
figure; hold on;
for t = t_vector
    plot(x(t), y(t), 'b.', 'MarkerSize', 16);
    axis([0 t_final 0 h]);
    pause(0.01);
end

. Вышеприведенный код сначала закроет любые цифры, которые мы открыли, создаем новый figure и используем hold on, чтобы мы могли называть plot несколько раз и добавлять точки к графику, не стирая каждый раз. Затем для каждого момента времени мы строим местоположение на графике как синюю точку, затем делаем размер точки 16. Мы также следим за тем, чтобы ось автоматически не корректировала себя, применяя значения x ограничены между t = 0 до t = t_final. Мы также ограничиваем значения y от y = 0 до начальной начальной высоты, что в моем примере составляет 30. В каждой точке мы останавливаемся на 0,01 мс, чтобы вы могли видеть рисунок точек.

В качестве бонуса это то, что фигура выглядит как анимированная gif:

enter image description here [/g0]

18
задан typedef 13 August 2016 в 14:38
поделиться

1 ответ

Можно использовать _init () как static метод. Это могло быть более опрятным решением Вашей проблемы:

import 'dart:async';
import 'dart:io';

class MyComponent{
  MyComponent();
  static Future init() async {
    print("init");
  }
}

void main() async {
  var c = await MyComponent.init();
  sleep(const Duration(seconds: 1));
  print("done");
}

не забывают отмечать функцию, в которой Вы используете свой init () как асинхронный.

0
ответ дан 30 November 2019 в 08:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: