Exemple #1
0
      void
      task(void)
      {
        // Return if task is not active.
        if (!isActive())
          return;

        double slat, slon, dx, dy, dz;
        slat = m_last_state.lat;
        slon = m_last_state.lon;

        // get absolute (simulated) position
        WGS84::displace(m_last_state.x, m_last_state.y, &slat, &slon);

        // compute offset from plume peak
        WGS84::displacement(slat, slon, 0, m_args.peak_lat, m_args.peak_lon, 0, &dx, &dy, &dz);

        // calculate value based on 2d gaussian function
        double expn = exp(-1 * ((dx * dx + dy * dy)
                                /(2 * m_args.peak_width * m_args.peak_width)));

        double val = m_args.away_val + (m_args.peak_val - m_args.away_val) * expn;
        val += m_prng->gaussian() * m_args.std_dev;
        m_msg->setValueFP(val);
        dispatch(m_msg);
      }