LCOV - code coverage report
Current view: top level - src/activitygen/city - AGPosition.cpp (source / functions) Hit Total Coverage
Test: lcov.info Lines: 26 34 76.5 %
Date: 2024-05-05 15:31:14 Functions: 9 11 81.8 %

          Line data    Source code
       1             : /****************************************************************************/
       2             : // Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.dev/sumo
       3             : // Copyright (C) 2001-2024 German Aerospace Center (DLR) and others.
       4             : // activitygen module
       5             : // Copyright 2010 TUM (Technische Universitaet Muenchen, http://www.tum.de/)
       6             : // This program and the accompanying materials are made available under the
       7             : // terms of the Eclipse Public License 2.0 which is available at
       8             : // https://www.eclipse.org/legal/epl-2.0/
       9             : // This Source Code may also be made available under the following Secondary
      10             : // Licenses when the conditions for such availability set forth in the Eclipse
      11             : // Public License 2.0 are satisfied: GNU General Public License, version 2
      12             : // or later which is available at
      13             : // https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html
      14             : // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-or-later
      15             : /****************************************************************************/
      16             : /// @file    AGPosition.cpp
      17             : /// @author  Piotr Woznica
      18             : /// @author  Walter Bamberger
      19             : /// @author  Daniel Krajzewicz
      20             : /// @author  Michael Behrisch
      21             : /// @date    July 2010
      22             : ///
      23             : // References a street of the city and defines a position in this street
      24             : /****************************************************************************/
      25             : #include <config.h>
      26             : 
      27             : #include "AGPosition.h"
      28             : #include "AGStreet.h"
      29             : #include "router/ROEdge.h"
      30             : #include "utils/common/RandHelper.h"
      31             : #include <iostream>
      32             : #include <limits>
      33             : 
      34             : 
      35             : // ===========================================================================
      36             : // method definitions
      37             : // ===========================================================================
      38         412 : AGPosition::AGPosition(const AGStreet& str, double pos) :
      39         412 :     street(&str), position(pos), pos2d(compute2dPosition()) {
      40         412 : }
      41             : 
      42             : 
      43        8551 : AGPosition::AGPosition(const AGStreet& str) :
      44        8551 :     street(&str), position(randomPositionInStreet(str)), pos2d(compute2dPosition()) {
      45        8551 : }
      46             : 
      47             : 
      48             : void
      49           0 : AGPosition::print() const {
      50           0 :     std::cout << "- AGPosition: *Street=" << street << " position=" << position << "/" << street->getLength() << std::endl;
      51           0 : }
      52             : 
      53             : 
      54             : bool
      55       15511 : AGPosition::operator==(const AGPosition& pos) const {
      56       15511 :     return pos2d.almostSame(pos.pos2d);
      57             : }
      58             : 
      59             : 
      60             : double
      61      350699 : AGPosition::distanceTo(const AGPosition& otherPos) const {
      62      350699 :     return pos2d.distanceTo(otherPos.pos2d);
      63             : }
      64             : 
      65             : 
      66             : double
      67           0 : AGPosition::minDistanceTo(const std::list<AGPosition>& positions) const {
      68             :     double minDist = std::numeric_limits<double>::infinity();
      69             :     double tempDist;
      70             :     std::list<AGPosition>::const_iterator itt;
      71             : 
      72           0 :     for (itt = positions.begin(); itt != positions.end(); ++itt) {
      73           0 :         tempDist = this->distanceTo(*itt);
      74           0 :         if (tempDist < minDist) {
      75             :             minDist = tempDist;
      76             :         }
      77             :     }
      78           0 :     return minDist;
      79             : }
      80             : 
      81             : 
      82             : double
      83       11282 : AGPosition::minDistanceTo(const std::map<int, AGPosition>& positions) const {
      84             :     double minDist = std::numeric_limits<double>::infinity();
      85             :     double tempDist;
      86             :     std::map<int, AGPosition>::const_iterator itt;
      87             : 
      88      349198 :     for (itt = positions.begin(); itt != positions.end(); ++itt) {
      89      337916 :         tempDist = this->distanceTo(itt->second);
      90      337916 :         if (tempDist < minDist) {
      91             :             minDist = tempDist;
      92             :         }
      93             :     }
      94       11282 :     return minDist;
      95             : }
      96             : 
      97             : 
      98             : const AGStreet&
      99       13506 : AGPosition::getStreet() const {
     100       13506 :     return *street;
     101             : }
     102             : 
     103             : 
     104             : double
     105        7896 : AGPosition::getPosition() const {
     106        7896 :     return position;
     107             : }
     108             : 
     109             : 
     110             : double
     111        8551 : AGPosition::randomPositionInStreet(const AGStreet& s) {
     112        8551 :     return RandHelper::rand(0.0, s.getLength());
     113             : }
     114             : 
     115             : 
     116             : Position
     117        8963 : AGPosition::compute2dPosition() const {
     118             :     // P = From + pos*(To - From) = pos*To + (1-pos)*From
     119        8963 :     Position From = street->getFromJunction()->getPosition();
     120        8963 :     Position To = street->getToJunction()->getPosition();
     121             :     Position position2d(To);
     122             : 
     123             :     position2d.sub(From);
     124        8963 :     position2d.mul(position / street->getLength());
     125             :     position2d.add(From);
     126             : 
     127        8963 :     return position2d;
     128             : }
     129             : 
     130             : 
     131             : /****************************************************************************/

Generated by: LCOV version 1.14