new file: Util/mercator.cpp
renamed: Util/MercatorUtil.h -> Util/mercator.hpp
This commit is contained in:
parent
ef9074f8e4
commit
bf71781ee9
@ -57,15 +57,16 @@ add_library(IMPORT OBJECT ${ImporterGlob})
|
|||||||
add_library(LOGGER OBJECT Util/simple_logger.cpp)
|
add_library(LOGGER OBJECT Util/simple_logger.cpp)
|
||||||
add_library(PHANTOMNODE OBJECT data_structures/phantom_node.cpp)
|
add_library(PHANTOMNODE OBJECT data_structures/phantom_node.cpp)
|
||||||
add_library(EXCEPTION OBJECT Util/osrm_exception.cpp)
|
add_library(EXCEPTION OBJECT Util/osrm_exception.cpp)
|
||||||
|
add_library(MERCATOR OBJECT Util/mercator.cpp)
|
||||||
|
|
||||||
set(ExtractorSources extract.cpp ${ExtractorGlob})
|
set(ExtractorSources extract.cpp ${ExtractorGlob})
|
||||||
add_executable(osrm-extract ${ExtractorSources} $<TARGET_OBJECTS:COORDINATE> $<TARGET_OBJECTS:FINGERPRINT> $<TARGET_OBJECTS:GITDESCRIPTION> $<TARGET_OBJECTS:IMPORT> $<TARGET_OBJECTS:LOGGER> $<TARGET_OBJECTS:EXCEPTION>)
|
add_executable(osrm-extract ${ExtractorSources} $<TARGET_OBJECTS:COORDINATE> $<TARGET_OBJECTS:FINGERPRINT> $<TARGET_OBJECTS:GITDESCRIPTION> $<TARGET_OBJECTS:IMPORT> $<TARGET_OBJECTS:LOGGER> $<TARGET_OBJECTS:EXCEPTION> $<TARGET_OBJECTS:MERCATOR>)
|
||||||
|
|
||||||
add_library(RESTRICTION OBJECT data_structures/restriction_map.cpp)
|
add_library(RESTRICTION OBJECT data_structures/restriction_map.cpp)
|
||||||
|
|
||||||
file(GLOB PrepareGlob contractor/*.cpp data_structures/hilbert_value.cpp Util/compute_angle.cpp {RestrictionMapGlob})
|
file(GLOB PrepareGlob contractor/*.cpp data_structures/hilbert_value.cpp Util/compute_angle.cpp {RestrictionMapGlob})
|
||||||
set(PrepareSources prepare.cpp ${PrepareGlob})
|
set(PrepareSources prepare.cpp ${PrepareGlob})
|
||||||
add_executable(osrm-prepare ${PrepareSources} $<TARGET_OBJECTS:FINGERPRINT> $<TARGET_OBJECTS:GITDESCRIPTION> $<TARGET_OBJECTS:COORDINATE> $<TARGET_OBJECTS:IMPORT> $<TARGET_OBJECTS:LOGGER> $<TARGET_OBJECTS:RESTRICTION> $<TARGET_OBJECTS:EXCEPTION>)
|
add_executable(osrm-prepare ${PrepareSources} $<TARGET_OBJECTS:FINGERPRINT> $<TARGET_OBJECTS:GITDESCRIPTION> $<TARGET_OBJECTS:COORDINATE> $<TARGET_OBJECTS:IMPORT> $<TARGET_OBJECTS:LOGGER> $<TARGET_OBJECTS:RESTRICTION> $<TARGET_OBJECTS:EXCEPTION> $<TARGET_OBJECTS:MERCATOR>)
|
||||||
|
|
||||||
file(GLOB ServerGlob Server/*.cpp)
|
file(GLOB ServerGlob Server/*.cpp)
|
||||||
file(GLOB DescriptorGlob descriptors/*.cpp)
|
file(GLOB DescriptorGlob descriptors/*.cpp)
|
||||||
@ -90,11 +91,11 @@ set(
|
|||||||
add_library(COORDINATE OBJECT ${CoordinateGlob})
|
add_library(COORDINATE OBJECT ${CoordinateGlob})
|
||||||
add_library(FINGERPRINT OBJECT Util/fingerprint.cpp)
|
add_library(FINGERPRINT OBJECT Util/fingerprint.cpp)
|
||||||
add_library(GITDESCRIPTION OBJECT Util/git_sha.cpp)
|
add_library(GITDESCRIPTION OBJECT Util/git_sha.cpp)
|
||||||
add_library(OSRM ${OSRMSources} $<TARGET_OBJECTS:GITDESCRIPTION> $<TARGET_OBJECTS:FINGERPRINT> $<TARGET_OBJECTS:COORDINATE> $<TARGET_OBJECTS:LOGGER> $<TARGET_OBJECTS:PHANTOMNODE> $<TARGET_OBJECTS:EXCEPTION>)
|
add_library(OSRM ${OSRMSources} $<TARGET_OBJECTS:GITDESCRIPTION> $<TARGET_OBJECTS:FINGERPRINT> $<TARGET_OBJECTS:COORDINATE> $<TARGET_OBJECTS:LOGGER> $<TARGET_OBJECTS:PHANTOMNODE> $<TARGET_OBJECTS:EXCEPTION> $<TARGET_OBJECTS:MERCATOR>)
|
||||||
add_dependencies(FINGERPRINT FingerPrintConfigure)
|
add_dependencies(FINGERPRINT FingerPrintConfigure)
|
||||||
|
|
||||||
add_executable(osrm-routed routed.cpp ${ServerGlob} $<TARGET_OBJECTS:EXCEPTION>)
|
add_executable(osrm-routed routed.cpp ${ServerGlob} $<TARGET_OBJECTS:EXCEPTION>)
|
||||||
add_executable(osrm-datastore datastore.cpp $<TARGET_OBJECTS:COORDINATE> $<TARGET_OBJECTS:FINGERPRINT> $<TARGET_OBJECTS:GITDESCRIPTION> $<TARGET_OBJECTS:LOGGER> $<TARGET_OBJECTS:EXCEPTION>)
|
add_executable(osrm-datastore datastore.cpp $<TARGET_OBJECTS:COORDINATE> $<TARGET_OBJECTS:FINGERPRINT> $<TARGET_OBJECTS:GITDESCRIPTION> $<TARGET_OBJECTS:LOGGER> $<TARGET_OBJECTS:EXCEPTION> $<TARGET_OBJECTS:MERCATOR>)
|
||||||
|
|
||||||
# Unit tests
|
# Unit tests
|
||||||
add_executable(datastructure-tests EXCLUDE_FROM_ALL UnitTests/datastructure_tests.cpp ${DataStructureTestsGlob} $<TARGET_OBJECTS:COORDINATE> $<TARGET_OBJECTS:LOGGER> $<TARGET_OBJECTS:PHANTOMNODE> $<TARGET_OBJECTS:EXCEPTION>)
|
add_executable(datastructure-tests EXCLUDE_FROM_ALL UnitTests/datastructure_tests.cpp ${DataStructureTestsGlob} $<TARGET_OBJECTS:COORDINATE> $<TARGET_OBJECTS:LOGGER> $<TARGET_OBJECTS:PHANTOMNODE> $<TARGET_OBJECTS:EXCEPTION>)
|
||||||
@ -289,7 +290,7 @@ if(WITH_TOOLS OR BUILD_TOOLS)
|
|||||||
message(STATUS "Activating OSRM internal tools")
|
message(STATUS "Activating OSRM internal tools")
|
||||||
find_package(GDAL)
|
find_package(GDAL)
|
||||||
if(GDAL_FOUND)
|
if(GDAL_FOUND)
|
||||||
add_executable(osrm-components tools/components.cpp $<TARGET_OBJECTS:FINGERPRINT> $<TARGET_OBJECTS:IMPORT> $<TARGET_OBJECTS:COORDINATE> $<TARGET_OBJECTS:LOGGER> $<TARGET_OBJECTS:RESTRICTION> $<TARGET_OBJECTS:EXCEPTION>)
|
add_executable(osrm-components tools/components.cpp $<TARGET_OBJECTS:FINGERPRINT> $<TARGET_OBJECTS:IMPORT> $<TARGET_OBJECTS:COORDINATE> $<TARGET_OBJECTS:LOGGER> $<TARGET_OBJECTS:RESTRICTION> $<TARGET_OBJECTS:EXCEPTION> $<TARGET_OBJECTS:MERCATOR>)
|
||||||
target_link_libraries(osrm-components ${TBB_LIBRARIES})
|
target_link_libraries(osrm-components ${TBB_LIBRARIES})
|
||||||
include_directories(${GDAL_INCLUDE_DIR})
|
include_directories(${GDAL_INCLUDE_DIR})
|
||||||
target_link_libraries(
|
target_link_libraries(
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
|
|
||||||
Copyright (c) 2013, Project OSRM, Dennis Luxen, others
|
Copyright (c) 2015, Project OSRM, Dennis Luxen, others
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
Redistribution and use in source and binary forms, with or without modification,
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
@ -28,7 +28,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||||||
#include "compute_angle.hpp"
|
#include "compute_angle.hpp"
|
||||||
|
|
||||||
#include "TrigonometryTables.h"
|
#include "TrigonometryTables.h"
|
||||||
#include "../Util/MercatorUtil.h"
|
#include "../Util/mercator.hpp"
|
||||||
|
|
||||||
#include <osrm/coordinate.hpp>
|
#include <osrm/coordinate.hpp>
|
||||||
|
|
||||||
@ -39,9 +39,9 @@ double ComputeAngle::OfThreeFixedPointCoordinates(const FixedPointCoordinate &A,
|
|||||||
const FixedPointCoordinate &B)
|
const FixedPointCoordinate &B)
|
||||||
{
|
{
|
||||||
const double v1x = (A.lon - C.lon) / COORDINATE_PRECISION;
|
const double v1x = (A.lon - C.lon) / COORDINATE_PRECISION;
|
||||||
const double v1y = lat2y(A.lat / COORDINATE_PRECISION) - lat2y(C.lat / COORDINATE_PRECISION);
|
const double v1y = mercator::lat2y(A.lat / COORDINATE_PRECISION) - mercator::lat2y(C.lat / COORDINATE_PRECISION);
|
||||||
const double v2x = (B.lon - C.lon) / COORDINATE_PRECISION;
|
const double v2x = (B.lon - C.lon) / COORDINATE_PRECISION;
|
||||||
const double v2y = lat2y(B.lat / COORDINATE_PRECISION) - lat2y(C.lat / COORDINATE_PRECISION);
|
const double v2y = mercator::lat2y(B.lat / COORDINATE_PRECISION) - mercator::lat2y(C.lat / COORDINATE_PRECISION);
|
||||||
|
|
||||||
double angle = (atan2_lookup(v2y, v2x) - atan2_lookup(v1y, v1x)) * 180. / M_PI;
|
double angle = (atan2_lookup(v2y, v2x) - atan2_lookup(v1y, v1x)) * 180. / M_PI;
|
||||||
while (angle < 0.)
|
while (angle < 0.)
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
|
|
||||||
Copyright (c) 2013, Project OSRM, Dennis Luxen, others
|
Copyright (c) 2015, Project OSRM, Dennis Luxen, others
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
Redistribution and use in source and binary forms, with or without modification,
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
@ -25,19 +25,16 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef MERCATOR_UTIL_H
|
#include "mercator.hpp"
|
||||||
#define MERCATOR_UTIL_H
|
|
||||||
|
|
||||||
#include <cmath>
|
#include <cmath>
|
||||||
|
|
||||||
inline double y2lat(const double a)
|
double mercator::y2lat(const double a)
|
||||||
{
|
{
|
||||||
return 180. * M_1_PI * (2. * std::atan(std::exp(a * M_PI / 180.)) - M_PI_2);
|
return 180. * M_1_PI * (2. * std::atan(std::exp(a * M_PI / 180.)) - M_PI_2);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline double lat2y(const double a)
|
double mercator::lat2y(const double a)
|
||||||
{
|
{
|
||||||
return 180. * M_1_PI * std::log(std::tan(M_PI_4 + a * (M_PI / 180.) / 2.));
|
return 180. * M_1_PI * std::log(std::tan(M_PI_4 + a * (M_PI / 180.) / 2.));
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif // MERCATOR_UTIL_H
|
|
38
Util/mercator.hpp
Normal file
38
Util/mercator.hpp
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
/*
|
||||||
|
|
||||||
|
Copyright (c) 2015, Project OSRM, Dennis Luxen, others
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
Redistributions of source code must retain the above copyright notice, this list
|
||||||
|
of conditions and the following disclaimer.
|
||||||
|
Redistributions in binary form must reproduce the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer in the documentation and/or
|
||||||
|
other materials provided with the distribution.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||||
|
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||||
|
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef MERCATOR_HPP
|
||||||
|
#define MERCATOR_HPP
|
||||||
|
|
||||||
|
struct mercator
|
||||||
|
{
|
||||||
|
static double y2lat(const double a);
|
||||||
|
|
||||||
|
static double lat2y(const double a);
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // MERCATOR_HPP
|
@ -25,7 +25,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "../Util/MercatorUtil.h"
|
#include "../Util/mercator.hpp"
|
||||||
#ifndef NDEBUG
|
#ifndef NDEBUG
|
||||||
#include "../Util/simple_logger.hpp"
|
#include "../Util/simple_logger.hpp"
|
||||||
#endif
|
#endif
|
||||||
@ -160,11 +160,11 @@ FixedPointCoordinate::ComputePerpendicularDistance(const FixedPointCoordinate &s
|
|||||||
const FixedPointCoordinate &point)
|
const FixedPointCoordinate &point)
|
||||||
{
|
{
|
||||||
// initialize values
|
// initialize values
|
||||||
const float x_value = static_cast<float>(lat2y(point.lat / COORDINATE_PRECISION));
|
const float x_value = static_cast<float>(mercator::lat2y(point.lat / COORDINATE_PRECISION));
|
||||||
const float y_value = point.lon / COORDINATE_PRECISION;
|
const float y_value = point.lon / COORDINATE_PRECISION;
|
||||||
float a = static_cast<float>(lat2y(source_coordinate.lat / COORDINATE_PRECISION));
|
float a = static_cast<float>(mercator::lat2y(source_coordinate.lat / COORDINATE_PRECISION));
|
||||||
float b = source_coordinate.lon / COORDINATE_PRECISION;
|
float b = source_coordinate.lon / COORDINATE_PRECISION;
|
||||||
float c = static_cast<float>(lat2y(target_coordinate.lat / COORDINATE_PRECISION));
|
float c = static_cast<float>(mercator::lat2y(target_coordinate.lat / COORDINATE_PRECISION));
|
||||||
float d = target_coordinate.lon / COORDINATE_PRECISION;
|
float d = target_coordinate.lon / COORDINATE_PRECISION;
|
||||||
float p, q;
|
float p, q;
|
||||||
if (std::abs(a - c) > std::numeric_limits<float>::epsilon())
|
if (std::abs(a - c) > std::numeric_limits<float>::epsilon())
|
||||||
@ -243,7 +243,7 @@ FixedPointCoordinate::ComputePerpendicularDistance(const FixedPointCoordinate &s
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{ // point lies in between
|
{ // point lies in between
|
||||||
nearest_location.lat = static_cast<int>(y2lat(p) * COORDINATE_PRECISION);
|
nearest_location.lat = static_cast<int>(mercator::y2lat(p) * COORDINATE_PRECISION);
|
||||||
nearest_location.lon = static_cast<int>(q * COORDINATE_PRECISION);
|
nearest_location.lon = static_cast<int>(q * COORDINATE_PRECISION);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -260,11 +260,11 @@ float FixedPointCoordinate::ComputePerpendicularDistance(const FixedPointCoordin
|
|||||||
BOOST_ASSERT(query_location.is_valid());
|
BOOST_ASSERT(query_location.is_valid());
|
||||||
|
|
||||||
// initialize values
|
// initialize values
|
||||||
const double x = lat2y(query_location.lat / COORDINATE_PRECISION);
|
const double x = mercator::lat2y(query_location.lat / COORDINATE_PRECISION);
|
||||||
const double y = query_location.lon / COORDINATE_PRECISION;
|
const double y = query_location.lon / COORDINATE_PRECISION;
|
||||||
const double a = lat2y(segment_source.lat / COORDINATE_PRECISION);
|
const double a = mercator::lat2y(segment_source.lat / COORDINATE_PRECISION);
|
||||||
const double b = segment_source.lon / COORDINATE_PRECISION;
|
const double b = segment_source.lon / COORDINATE_PRECISION;
|
||||||
const double c = lat2y(segment_target.lat / COORDINATE_PRECISION);
|
const double c = mercator::lat2y(segment_target.lat / COORDINATE_PRECISION);
|
||||||
const double d = segment_target.lon / COORDINATE_PRECISION;
|
const double d = segment_target.lon / COORDINATE_PRECISION;
|
||||||
double p, q /*,mX*/, nY;
|
double p, q /*,mX*/, nY;
|
||||||
if (std::abs(a - c) > std::numeric_limits<double>::epsilon())
|
if (std::abs(a - c) > std::numeric_limits<double>::epsilon())
|
||||||
@ -317,7 +317,7 @@ float FixedPointCoordinate::ComputePerpendicularDistance(const FixedPointCoordin
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
// point lies in between
|
// point lies in between
|
||||||
nearest_location.lat = static_cast<int>(y2lat(p) * COORDINATE_PRECISION);
|
nearest_location.lat = static_cast<int>(mercator::y2lat(p) * COORDINATE_PRECISION);
|
||||||
nearest_location.lon = static_cast<int>(q * COORDINATE_PRECISION);
|
nearest_location.lon = static_cast<int>(q * COORDINATE_PRECISION);
|
||||||
}
|
}
|
||||||
BOOST_ASSERT(nearest_location.is_valid());
|
BOOST_ASSERT(nearest_location.is_valid());
|
||||||
@ -430,11 +430,11 @@ int FixedPointCoordinate::OrderedPerpendicularDistanceApproximation(
|
|||||||
const FixedPointCoordinate &segment_target)
|
const FixedPointCoordinate &segment_target)
|
||||||
{
|
{
|
||||||
// initialize values
|
// initialize values
|
||||||
const float x = static_cast<float>(lat2y(input_point.lat / COORDINATE_PRECISION));
|
const float x = static_cast<float>(mercator::lat2y(input_point.lat / COORDINATE_PRECISION));
|
||||||
const float y = input_point.lon / COORDINATE_PRECISION;
|
const float y = input_point.lon / COORDINATE_PRECISION;
|
||||||
const float a = static_cast<float>(lat2y(segment_source.lat / COORDINATE_PRECISION));
|
const float a = static_cast<float>(mercator::lat2y(segment_source.lat / COORDINATE_PRECISION));
|
||||||
const float b = segment_source.lon / COORDINATE_PRECISION;
|
const float b = segment_source.lon / COORDINATE_PRECISION;
|
||||||
const float c = static_cast<float>(lat2y(segment_target.lat / COORDINATE_PRECISION));
|
const float c = static_cast<float>(mercator::lat2y(segment_target.lat / COORDINATE_PRECISION));
|
||||||
const float d = segment_target.lon / COORDINATE_PRECISION;
|
const float d = segment_target.lon / COORDINATE_PRECISION;
|
||||||
|
|
||||||
float p, q;
|
float p, q;
|
||||||
@ -476,7 +476,7 @@ int FixedPointCoordinate::OrderedPerpendicularDistanceApproximation(
|
|||||||
{
|
{
|
||||||
// point lies in between
|
// point lies in between
|
||||||
dx = input_point.lon - static_cast<int>(q * COORDINATE_PRECISION);
|
dx = input_point.lon - static_cast<int>(q * COORDINATE_PRECISION);
|
||||||
dy = input_point.lat - static_cast<int>(y2lat(p) * COORDINATE_PRECISION);
|
dy = input_point.lat - static_cast<int>(mercator::y2lat(p) * COORDINATE_PRECISION);
|
||||||
}
|
}
|
||||||
|
|
||||||
// return an approximation in the plane
|
// return an approximation in the plane
|
||||||
|
@ -38,7 +38,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||||||
|
|
||||||
#include "../Util/floating_point.hpp"
|
#include "../Util/floating_point.hpp"
|
||||||
#include "../Util/integer_range.hpp"
|
#include "../Util/integer_range.hpp"
|
||||||
#include "../Util/MercatorUtil.h"
|
#include "../Util/mercator.hpp"
|
||||||
#include "../Util/osrm_exception.hpp"
|
#include "../Util/osrm_exception.hpp"
|
||||||
#include "../Util/simple_logger.hpp"
|
#include "../Util/simple_logger.hpp"
|
||||||
#include "../Util/timing_util.hpp"
|
#include "../Util/timing_util.hpp"
|
||||||
@ -377,7 +377,7 @@ class StaticRTree
|
|||||||
FixedPointCoordinate(coordinate_list.at(current_element.v).lat,
|
FixedPointCoordinate(coordinate_list.at(current_element.v).lat,
|
||||||
coordinate_list.at(current_element.v).lon));
|
coordinate_list.at(current_element.v).lon));
|
||||||
current_centroid.lat =
|
current_centroid.lat =
|
||||||
COORDINATE_PRECISION * lat2y(current_centroid.lat / COORDINATE_PRECISION);
|
COORDINATE_PRECISION * mercator::lat2y(current_centroid.lat / COORDINATE_PRECISION);
|
||||||
|
|
||||||
current_wrapper.m_hilbert_value = get_hilbert_number(current_centroid);
|
current_wrapper.m_hilbert_value = get_hilbert_number(current_centroid);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user