timer -= dt;
if (timer <= 0.0 ) {
- SGGeoc myPosition = SGGeoc::fromDegM( probe_lon_deg[0], probe_lat_deg[0], 20000.0 );
- double ground_wind_from_rad = _surface_wind_from_deg_node->getDoubleValue() * SG_DEGREES_TO_RADIANS + SG_PI;
-
// probe0 is current position
probe_lat_deg[0] = _user_latitude_node->getDoubleValue();
probe_lon_deg[0] = _user_longitude_node->getDoubleValue();
probe_elev_m[0] = _ground_elev_node->getDoubleValue() * SG_FEET_TO_METER;
+ // position is geodetic, need geocentric for advanceRadM
+ SGGeod myGeodPos = SGGeod::fromDegM( probe_lon_deg[0], probe_lat_deg[0], 20000.0 );
+ SGGeoc myGeocPos = SGGeoc::fromGeod( myGeodPos );
+ double ground_wind_from_rad = _surface_wind_from_deg_node->getDoubleValue() * SG_DEGREES_TO_RADIANS;
+
// compute the remaining probes
- for (int i = 1; i < sizeof(probe_lat_deg)/sizeof(probe_lat_deg[0]); i++) {
- SGGeoc probe = myPosition.advanceRadM( ground_wind_from_rad, dist_probe_m[i] );
- probe_lat_deg[i] = probe.getLatitudeDeg();
- probe_lon_deg[i] = probe.getLongitudeDeg();
- if (!globals->get_scenery()->get_elevation_m(
- SGGeod::fromDegM(probe_lon_deg[i],probe_lat_deg[i], 20000), probe_elev_m[i], NULL )) {
+ for (unsigned i = 1; i < sizeof(probe_elev_m)/sizeof(probe_elev_m[0]); i++) {
+ SGGeoc probe = myGeocPos.advanceRadM( ground_wind_from_rad, dist_probe_m[i] );
+ // convert to geodetic position for ground level computation
+ SGGeod probeGeod = SGGeod::fromGeoc( probe );
+ probe_lat_deg[i] = probeGeod.getLatitudeDeg();
+ probe_lon_deg[i] = probeGeod.getLongitudeDeg();
+ if (!globals->get_scenery()->get_elevation_m( probeGeod, probe_elev_m[i], NULL )) {
// no ground found? use elevation of previous probe :-(
probe_elev_m[i] = probe_elev_m[i-1];
}
slope[2] = (probe_elev_m[2] - probe_elev_m[3]) / dist_probe_m[3];
slope[3] = (probe_elev_m[4] - probe_elev_m[0]) / -dist_probe_m[4];
- for (int i = 0; i < sizeof(slope)/sizeof(slope[0]); i++)
+ for (unsigned i = 0; i < sizeof(slope)/sizeof(slope[0]); i++)
adj_slope[i] = sin(atan(5.0 * pow ( (fabs(slope[i])),1.7) ) ) *sign(slope[i]);
//adjustment