Skip to content

Commit

Permalink
-
Browse files Browse the repository at this point in the history
  • Loading branch information
DiegoGomezDeck committed Oct 15, 2018
1 parent d3c4fe2 commit b2ffebb
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 25 deletions.
Expand Up @@ -17,10 +17,9 @@




//class Geodetic3D;
//class Geodetic2D;
//class EllipsoidalPlanet;
//class Planet;


public class LayoutUtils
Expand All @@ -29,18 +28,18 @@ private LayoutUtils()
{
}

public static java.util.ArrayList<Geodetic3D> splitOverCircle(EllipsoidalPlanet EllipsoidalPlanet, Geodetic3D center, double radiusInMeters, int splits)
public static java.util.ArrayList<Geodetic3D> splitOverCircle(Planet planet, Geodetic3D center, double radiusInMeters, int splits)
{
return splitOverCircle(EllipsoidalPlanet, center, radiusInMeters, splits, Angle.zero());
return splitOverCircle(planet, center, radiusInMeters, splits, Angle.zero());
}
public static java.util.ArrayList<Geodetic3D> splitOverCircle(EllipsoidalPlanet EllipsoidalPlanet, Geodetic3D center, double radiusInMeters, int splits, Angle startAngle)
public static java.util.ArrayList<Geodetic3D> splitOverCircle(Planet planet, Geodetic3D center, double radiusInMeters, int splits, Angle startAngle)
{
java.util.ArrayList<Geodetic3D> result = new java.util.ArrayList<Geodetic3D>();

final double startAngleInRadians = startAngle._radians;
final double deltaInRadians = (DefineConstants.PI * 2.0) / splits;
final Vector3D cartesianCenter = EllipsoidalPlanet.toCartesian(center);
final Vector3D normal = EllipsoidalPlanet.geodeticSurfaceNormal(center);
final Vector3D cartesianCenter = planet.toCartesian(center);
final Vector3D normal = planet.geodeticSurfaceNormal(center);
final Vector3D northInPlane = Vector3D.UP_Z.projectionInPlane(normal).normalized().times(radiusInMeters);

for (int i = 0; i < splits; i++)
Expand All @@ -50,19 +49,20 @@ public static java.util.ArrayList<Geodetic3D> splitOverCircle(EllipsoidalPlanet
final Vector3D finalVector = northInPlane.rotateAroundAxis(normal, Angle.fromRadians(angleInRadians));
final Vector3D cartesianPosition = cartesianCenter.add(finalVector);

result.add(new Geodetic3D(EllipsoidalPlanet.toGeodetic3D(cartesianPosition)));
result.add(new Geodetic3D(planet.toGeodetic3D(cartesianPosition)));
}

return result;
}
public static java.util.ArrayList<Geodetic2D> splitOverCircle(EllipsoidalPlanet EllipsoidalPlanet, Geodetic2D center, double radiusInMeters, int splits)

public static java.util.ArrayList<Geodetic2D> splitOverCircle(Planet planet, Geodetic2D center, double radiusInMeters, int splits)
{
return splitOverCircle(EllipsoidalPlanet, center, radiusInMeters, splits, Angle.zero());
return splitOverCircle(planet, center, radiusInMeters, splits, Angle.zero());
}
public static java.util.ArrayList<Geodetic2D> splitOverCircle(EllipsoidalPlanet EllipsoidalPlanet, Geodetic2D center, double radiusInMeters, int splits, Angle startAngle)
public static java.util.ArrayList<Geodetic2D> splitOverCircle(Planet planet, Geodetic2D center, double radiusInMeters, int splits, Angle startAngle)
{
java.util.ArrayList<Geodetic2D> result2D = new java.util.ArrayList<Geodetic2D>();
java.util.ArrayList<Geodetic3D> result3D = splitOverCircle(EllipsoidalPlanet, new Geodetic3D(center, 0), radiusInMeters, splits, startAngle);
java.util.ArrayList<Geodetic3D> result3D = splitOverCircle(planet, new Geodetic3D(center, 0), radiusInMeters, splits, startAngle);

for (int i = 0; i < splits; i++)
{
Expand Down
15 changes: 7 additions & 8 deletions iOS/G3MiOSSDK/Commons/Geometry/LayoutUtils.cpp
Expand Up @@ -14,7 +14,7 @@
#include "Geodetic2D.hpp"


std::vector<Geodetic3D*> LayoutUtils::splitOverCircle(const EllipsoidalPlanet* EllipsoidalPlanet,
std::vector<Geodetic3D*> LayoutUtils::splitOverCircle(const Planet* planet,
const Geodetic3D& center,
double radiusInMeters,
int splits,
Expand All @@ -23,8 +23,8 @@ std::vector<Geodetic3D*> LayoutUtils::splitOverCircle(const EllipsoidalPlanet* E

const double startAngleInRadians = startAngle._radians;
const double deltaInRadians = (PI * 2.0) / splits;
const Vector3D cartesianCenter = EllipsoidalPlanet->toCartesian(center);
const Vector3D normal = EllipsoidalPlanet->geodeticSurfaceNormal(center);
const Vector3D cartesianCenter = planet->toCartesian(center);
const Vector3D normal = planet->geodeticSurfaceNormal(center);
const Vector3D northInPlane = Vector3D::UP_Z.projectionInPlane(normal).normalized().times(radiusInMeters);

for (int i = 0; i < splits; i++) {
Expand All @@ -34,22 +34,21 @@ std::vector<Geodetic3D*> LayoutUtils::splitOverCircle(const EllipsoidalPlanet* E
Angle::fromRadians(angleInRadians));
const Vector3D cartesianPosition = cartesianCenter.add(finalVector);

result.push_back( new Geodetic3D( EllipsoidalPlanet->toGeodetic3D(cartesianPosition) ) );
result.push_back( new Geodetic3D( planet->toGeodetic3D(cartesianPosition) ) );
}

return result;
}


std::vector<Geodetic2D*> LayoutUtils::splitOverCircle(const EllipsoidalPlanet* EllipsoidalPlanet,
std::vector<Geodetic2D*> LayoutUtils::splitOverCircle(const Planet* planet,
const Geodetic2D& center,
double radiusInMeters,
int splits,
const Angle& startAngle) {
std::vector<Geodetic2D*> result2D;
std::vector<Geodetic3D*> result3D = splitOverCircle(EllipsoidalPlanet, Geodetic3D(center, 0), radiusInMeters, splits, startAngle);
std::vector<Geodetic3D*> result3D = splitOverCircle(planet, Geodetic3D(center, 0), radiusInMeters, splits, startAngle);

for (int i = 0; i < splits; i++) {
for (int i = 0; i < splits; i++) {
result2D.push_back( new Geodetic2D(result3D[i]->asGeodetic2D()));
delete result3D[i];
}
Expand Down
9 changes: 4 additions & 5 deletions iOS/G3MiOSSDK/Commons/Geometry/LayoutUtils.hpp
Expand Up @@ -10,30 +10,29 @@
#define G3MiOSSDK_LayoutUtils

#include <vector>

#include "Angle.hpp"

class Geodetic3D;
class Geodetic2D;
class EllipsoidalPlanet;
class Planet;


class LayoutUtils {
private:
LayoutUtils() {}

public:
static std::vector<Geodetic3D*> splitOverCircle(const EllipsoidalPlanet* EllipsoidalPlanet,
static std::vector<Geodetic3D*> splitOverCircle(const Planet* planet,
const Geodetic3D& center,
double radiusInMeters,
int splits,
const Angle& startAngle = Angle::zero());
static std::vector<Geodetic2D*> splitOverCircle(const EllipsoidalPlanet* EllipsoidalPlanet,

static std::vector<Geodetic2D*> splitOverCircle(const Planet* planet,
const Geodetic2D& center,
double radiusInMeters,
int splits,
const Angle& startAngle = Angle::zero());
};


#endif

0 comments on commit b2ffebb

Please sign in to comment.