Cd = c;
}
-void FGAIBallistic::setWeight(double w) {
- weight = w;
+void FGAIBallistic::setMass(double m) {
+ mass = m;
}
void FGAIBallistic::Run(double dt) {
double speed_east_deg_sec;
double wind_speed_from_north_deg_sec;
double wind_speed_from_east_deg_sec;
- double mass;
-
- // the drag calculations below assume sea-level density,
- // rho = 0.023780 slugs/ft3
- // calculate mass
- mass = weight * lbs_to_slugs;
// drag = Cd * 0.5 * rho * speed * speed * drag_area;
+ // rho is adjusted for altitude in void FGAIBase::update,
+ // using Standard Atmosphere (sealevel temperature 15C)
// acceleration = drag/mass;
// adjust speed by drag
speed -= (Cd * 0.5 * rho * speed * speed * drag_area/mass) * dt;
}
// end AIBallistic
+
-// FGAIBallistic - AIBase derived class creates an AI ballistic object
+// FGAIBallistic.hxx - AIBase derived class creates an AI ballistic object
//
// Written by David Culp, started November 2003.
// - davidculp2@comcast.net
void setWind_from_north( double fps );
void setWind( bool val );
void setCd( double c );
- void setWeight( double w );
+ void setMass( double m );
double _getTime() const;
double wind_from_north; // fps
bool wind; // if true, local wind will be applied to object
double Cd; // drag coefficient
- double weight; // lbs
+ double mass; // slugs
void Run(double dt);
};
#endif // _FG_AIBALLISTIC_HXX
+
double wind_from_north; // in feet per second
double cd; // coefficient of drag
bool wind; // if true, model reacts to parent wind
- double weight; // in lbs
+ double mass; // in slugs
} FGAIModelEntity;
ai_ballistic->setWind(entity->wind);
ai_ballistic->setRoll(entity->roll);
ai_ballistic->setCd(entity->cd);
- ai_ballistic->setWeight(entity->weight);
+ ai_ballistic->setMass(entity->mass);
ai_ballistic->init();
ai_ballistic->bind();
return ai_ballistic;
en->wind_from_north = entry_node->getDoubleValue("wind_from_north", 0);
en->wind = entry_node->getBoolValue("wind", false);
en->cd = entry_node->getDoubleValue ("cd", 0.029);
- en->weight = entry_node->getDoubleValue ("weight", 0.030);
+ en->mass = entry_node->getDoubleValue ("mass", 0.007);
+
en->fp = NULL;
if (en->flightplan != ""){
}
// end scenario.cxx
+
out[0] = out[1] = out[2] = 0;
in[3] = out[3] = 1;
+ string contents_node;
}
SubmodelSystem::~SubmodelSystem ()
entity.wind_from_north = IC.wind_from_north;
entity.wind = sm->wind;
entity.cd = sm->cd;
- entity.weight = sm->weight;
+ entity.mass = IC.mass;
ai->createBallistic( &entity );
if (sm->count > 0) (sm->count)--;
void
SubmodelSystem::load ()
{
+
int i;
SGPropertyNode *path = fgGetNode("/sim/systems/submodels/path");
SGPropertyNode root;
sm->first_time = false;
sm->cd = entry_node->getDoubleValue("cd", 0.295);
sm->weight = entry_node->getDoubleValue("weight", 0.25);
+ sm->contents_node = fgGetNode(entry_node->getStringValue("contents", "none"), true);
sm->trigger->setBoolValue(false);
sm->timer = sm->delay;
-
+
+ sm->contents = sm->contents_node->getDoubleValue();
+
sm->prop = fgGetNode("/systems/submodels/submodel", i, true);
sm->prop->tie("count", SGRawValuePointer<int>(&(sm->count)));
+// sm->prop->tie("contents", SGRawValuePointer<double>(&(sm->contents)));
+// sm->prop->tie("contents path", SGRawValuePointer<const char *>(&(sm->contents_node)));
submodels.push_back( sm );
}
SubmodelSystem::transform( submodel* sm)
{
- // get initial conditions
+// get initial conditions
+
+// get the weight of the contents (lbs) and convert to mass (slugs)
+ sm->contents = sm->contents_node->getDoubleValue();
+
+ IC.mass = (sm->weight + sm->contents) * lbs_to_slugs;;
+// cout << IC.mass << endl;
+
+// set contents to 0 in the parent
+ sm->contents_node->setDoubleValue(0);
IC.lat = _user_lat_node->getDoubleValue();
IC.lon = _user_lon_node->getDoubleValue();
in[0] = sm->x_offset;
in[1] = sm->y_offset;
in[2] = sm->z_offset;
+
- IC.mass = sm->weight * lbs_to_slugs;
-
// pre-process the trig functions
cosRx = cos(-IC.roll * SG_DEGREES_TO_RADIANS);
+
typedef struct {
SGPropertyNode* trigger;
SGPropertyNode* prop;
+ SGPropertyNode* contents_node;
string name;
string model;
bool first_time;
double cd;
double weight;
-// double mass;
+ double contents;
} submodel;
typedef struct {
#endif // __SYSTEMS_SUBMODEL_HXX
+