【发布时间】:2018-09-27 11:27:08
【问题描述】:
我正在模拟无人机的飞行,使用高度可观察的数据。高度应根据此方案变化:
- 高度从 0 增加到
BaseAltitude,即固定高度。 - 到达
BaseAltitude后,无人机开始巡航,描述正弦波,从BaseAltitude开始 - 收到信号后,无人机应开始着陆。也就是说,从当前高度开始,无人机应该直线下降,直到达到0。
您可能会注意到,当着陆开始时,高度在设计时是未知的。起飞序列应以最后一个高度为起点。因此,一个序列取决于另一个序列产生的最后一个值。我的脑袋疼!
好吧,我完全被这个困住了。
我目前唯一的代码如下。我用它来说明问题。你会很快得到它...
public class Drone
{
public Drone()
{
var interval = TimeSpan.FromMilliseconds(200);
var takeOff = Observable.Interval(interval).TakeWhile(h => h < BaseAltitude).Select(t => (double)t);
var cruise = Observable
.Interval(interval).Select(t => 100 * Math.Sin(t * 2 * Math.PI / 180) + BaseAltitude)
.TakeUntil(_ => IsLanding);
var landing = Observable
.Interval(interval).Select(t => ??? );
Altitude = takeOff.Concat(cruise).Concat(landing);
}
public bool IsLanding { get; set; }
public double BaseAltitude { get; set; } = 100;
public IObservable<double> Altitude { get; }
}
【问题讨论】:
标签: c# .net observable system.reactive