Exemple #1
0
void Road::getLaneRoadPoints(double s, int i, RoadPoint &pointIn, RoadPoint &pointOut, double &disIn, double &disOut)
{
    LaneSection *section = (--laneSectionMap.upper_bound(s))->second;
    disIn = section->getDistanceToLane(s, i);
    disOut = disIn + section->getLaneWidth(s, i);
    //std::cerr << "s: " << s << ", i: " << i << ", distance: " << disIn << ", width: " << disOut-disIn << std::endl;

    Vector3D xyPoint = ((--xyMap.upper_bound(s))->second)->getPoint(s);
    Vector2D zPoint = ((--zMap.upper_bound(s))->second)->getPoint(s);

    double alpha = ((--lateralProfileMap.upper_bound(s))->second)->getAngle(s, (disOut + disIn) * 0.5);
    double beta = zPoint[1];
    double gamma = xyPoint[2];
    double Tx = (sin(alpha) * sin(beta) * cos(gamma) - cos(alpha) * sin(gamma));
    double Ty = (sin(alpha) * sin(beta) * sin(gamma) + cos(alpha) * cos(gamma));
    double Tz = (sin(alpha) * cos(beta));
    //std::cout << "s: " << s << ", i: " << i << ", alpha: " << alpha << ", beta: " << beta << ", gamma: " << gamma << std::endl;

    double nx = sin(alpha) * sin(gamma) + cos(alpha) * sin(beta) * cos(gamma);
    double ny = cos(alpha) * sin(beta) * sin(gamma) - sin(alpha) * cos(gamma);
    double nz = cos(alpha) * cos(beta);

    pointIn = RoadPoint(xyPoint.x() + Tx * disIn, xyPoint.y() + Ty * disIn, zPoint[0] + Tz * disIn, nx, ny, nz);
    pointOut = RoadPoint(xyPoint.x() + Tx * disOut, xyPoint.y() + Ty * disOut, zPoint[0] + Tz * disOut, nx, ny, nz);
    //std::cout << "s: " << s << ", i: " << i << ", inner: x: " << pointIn.x() << ", y: " << pointIn.y() << ", z: " << pointIn.z() << std::endl;
    //std::cout << "s: " << s << ", i: " << i << ", outer: x: " << pointOut.x() << ", y: " << pointOut.y() << ", z: " << pointOut.z() << std::endl << std::endl;
}
Exemple #2
0
RoadPoint Road::getRoadPoint(double s, double t)
{
    //RoadPoint center = getChordLinePoint(s);
    Vector3D xyPoint = ((--xyMap.upper_bound(s))->second)->getPoint(s);
    Vector2D zPoint = ((--zMap.upper_bound(s))->second)->getPoint(s);

    //std::cerr << "Center: x: " << center.x() << ", y: " << center.y() << ", z: " << center.z() << std::endl;

    double alpha = ((--lateralProfileMap.upper_bound(s))->second)->getAngle(s, t);
    double beta = zPoint[1];
    double gamma = xyPoint[2];
    //std::cerr << "s: " << s << "Alpha: " << alpha << ", Beta: " << beta << ", Gamma: " << gamma << std::endl;
    double sinalpha = sin(alpha);
    double cosalpha = cos(alpha);
    double sinbeta = sin(beta);
    double cosbeta = cos(beta);
    double singamma = sin(gamma);
    double cosgamma = cos(gamma);

    return RoadPoint(xyPoint.x() + (sinalpha * sinbeta * cosgamma - cosalpha * singamma) * t,
                     xyPoint.y() + (sinalpha * sinbeta * singamma + cosalpha * cosgamma) * t,
                     zPoint[0] + (sinalpha * cosbeta) * t,
                     sinalpha * singamma + cosalpha * sinbeta * cosgamma,
                     cosalpha * sinbeta * singamma - sinalpha * cosgamma,
                     cosalpha * cosbeta);
}
Exemple #3
0
 RoadPoint GetRoadPoint(bool front) const { return RoadPoint(m_featureId, GetPointId(front)); }
Exemple #4
0
RoadPoint Road::getChordLinePoint(double s)
{
    Vector3D xyPoint(((--xyMap.upper_bound(s))->second)->getPoint(s));
    double zValue = (((--zMap.upper_bound(s))->second)->getValue(s));
    return RoadPoint(xyPoint.x(), xyPoint.y(), zValue);
}