Add satellite position allocator

This commit is contained in:
Tim Schubert 2020-08-15 17:25:55 +02:00
parent cc2a8ae5e9
commit 6fdfc6b2a8
2 changed files with 91 additions and 0 deletions

View file

@ -0,0 +1,52 @@
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
#include "ns3/integer.h"
#include "leo-circular-orbit-position-allocator.h"
namespace ns3 {
NS_OBJECT_ENSURE_REGISTERED (LeoCircularOrbitAllocator);
LeoCircularOrbitAllocator::LeoCircularOrbitAllocator ()
: m_lastOrbit (0), m_lastSatellite (0)
{}
LeoCircularOrbitAllocator::~LeoCircularOrbitAllocator ()
{}
TypeId
LeoCircularOrbitAllocator::GetTypeId (void)
{
static TypeId tid = TypeId ("ns3::LeoCircularOrbitPostionAllocator")
.SetParent<PositionAllocator> ()
.SetGroupName ("Leo")
.AddConstructor<LeoCircularOrbitAllocator> ()
.AddAttribute ("NumOrbits",
"The number of orbits",
IntegerValue (1),
MakeIntegerAccessor (&LeoCircularOrbitAllocator::m_numOrbits),
MakeIntegerChecker<uint64_t> ())
.AddAttribute ("NumSatellites",
"The number of satellites per orbit",
IntegerValue (1),
MakeIntegerAccessor (&LeoCircularOrbitAllocator::m_numSatellites),
MakeIntegerChecker<uint64_t> ())
;
return tid;
}
int64_t
LeoCircularOrbitAllocator::AssignStreams (int64_t stream)
{
return -1;
}
Vector
LeoCircularOrbitAllocator::GetNext () const
{
return Vector (180 * ((double) m_lastOrbit / (double) m_numOrbits),
360.0 * ((double) m_lastSatellite / (double) m_numSatellites),
0);
}
};

View file

@ -0,0 +1,39 @@
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
#ifndef LEO_CIRCULAR_ORBIT_HELPER_H
#define LEO_CIRCULAR_ORBIT_HELPER_H
#include "ns3/position-allocator.h"
namespace ns3 {
/**
* \brief Allocate pairs of latitude and longitude (offset within orbit) for
* use in LeoCircularOrbitMobilityModel
*/
class LeoCircularOrbitAllocator : public PositionAllocator
{
public:
/**
* Register this type with the TypeId system.
* \return the object TypeId
*/
static TypeId GetTypeId ();
LeoCircularOrbitAllocator ();
virtual ~LeoCircularOrbitAllocator ();
virtual Vector GetNext (void) const;
virtual int64_t AssignStreams (int64_t stream);
private:
uint64_t m_numOrbits;
uint64_t m_numSatellites;
mutable uint64_t m_lastOrbit;
mutable uint64_t m_lastSatellite;
};
};
#endif