X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Flibr2c2%2Fvehicle.cpp;h=17d67b666a28a49ae73822f82e91aec6162db1b1;hb=b0d402f30489b0618d21281781e1b8f683ed567b;hp=5ea9e5a8d7cb3089c3a2938573a4a9508b2a9c5c;hpb=0443ca05cbd306487131f5f5bd3b91181ae4a733;p=r2c2.git diff --git a/source/libr2c2/vehicle.cpp b/source/libr2c2/vehicle.cpp index 5ea9e5a..17d67b6 100644 --- a/source/libr2c2/vehicle.cpp +++ b/source/libr2c2/vehicle.cpp @@ -166,12 +166,12 @@ const Vehicle::Rod &Vehicle::get_rod(unsigned i) const void Vehicle::update_position() { - TrackPoint tp; + OrientedPoint p; if(axles.size()>=2) { float wheelbase = axles.front().type->position-axles.back().type->position; - tp = get_point(track, wheelbase, -axles.back().type->position/wheelbase); + p = get_point(track, wheelbase, -axles.back().type->position/wheelbase); } else if(bogies.size()>=2) { @@ -182,28 +182,29 @@ void Vehicle::update_position() const vector &front_axles = bogies.front().axles; float wheelbase = front_axles.front().type->position-front_axles.back().type->position; - TrackPoint front_point = get_point(front, wheelbase, -front_axles.back().type->position/wheelbase); + OrientedPoint front_point = get_point(front, wheelbase, -front_axles.back().type->position/wheelbase); const vector &back_axles = bogies.back().axles; wheelbase = back_axles.front().type->position-back_axles.back().type->position; - TrackPoint back_point = get_point(back, wheelbase, -back_axles.back().type->position/wheelbase); + OrientedPoint back_point = get_point(back, wheelbase, -back_axles.back().type->position/wheelbase); - tp = get_point(front_point.pos, back_point.pos, -bogies.back().type->position/bogie_spacing); + p = get_point(front_point.position, back_point.position, -bogies.back().type->position/bogie_spacing); - bogies.front().direction = front_point.dir-tp.dir; - bogies.back().direction = back_point.dir-tp.dir; + bogies.front().direction = front_point.rotation-p.rotation; + bogies.back().direction = back_point.rotation-p.rotation; } else - tp = track.point(); + p = track.point(); if(!prev) check_sensor(type.get_front_axle_offset(), front_sensor); if(!next) check_sensor(type.get_back_axle_offset(), back_sensor); - position = tp.pos; + position = p.position; position.z += layout.get_catalogue().get_rail_elevation(); - rotation = tp.dir; + rotation = p.rotation; + tilt = p.tilt; signal_moved.emit(); } @@ -347,8 +348,8 @@ void Vehicle::adjust_for_distance(TrackOffsetIter &front, TrackOffsetIter &back, int adjust_dir = 0; while(1) { - Vector front_point = front.point().pos; - Vector back_point = back.point().pos; + Vector front_point = front.point().position; + Vector back_point = back.point().position; float dist = distance(front_point, back_point); @@ -371,24 +372,25 @@ void Vehicle::adjust_for_distance(TrackOffsetIter &front, TrackOffsetIter &back, } } -TrackPoint Vehicle::get_point(const Vector &front, const Vector &back, float ratio) const +OrientedPoint Vehicle::get_point(const Vector &front, const Vector &back, float ratio) const { Vector span = front-back; - TrackPoint tp; - tp.pos = back+span*ratio; - tp.dir = Geometry::atan2(span.y, span.x); + OrientedPoint p; + p.position = back+span*ratio; + p.rotation = Geometry::atan2(span.y, span.x); + p.tilt = Geometry::atan2(span.z, LinAl::Vector(span).norm()); - return tp; + return p; } -TrackPoint Vehicle::get_point(const TrackOffsetIter &iter, float tdist, float ratio) const +OrientedPoint Vehicle::get_point(const TrackOffsetIter &iter, float tdist, float ratio) const { TrackOffsetIter front = iter.advance(tdist*(1-ratio)); TrackOffsetIter back = iter.advance(-tdist*ratio); adjust_for_distance(front, back, tdist, ratio); - return get_point(front.point().pos, back.point().pos, ratio); + return get_point(front.point().position, back.point().position, ratio); } unsigned Vehicle::get_n_link_slots() const