cpp-toolbox  0.0.1
A toolbox library for C++
Loading...
Searching...
No Matches
point_metric_adapter.hpp
Go to the documentation of this file.
1#pragma once
2
5
6namespace toolbox::metrics
7{
8
9// Adapter to use IMetric with point types
10template<typename T>
11class PointMetricAdapter : public IMetric<T>
12{
13public:
14 explicit PointMetricAdapter(std::shared_ptr<IMetric<T>> metric)
15 : m_metric(metric) {}
16
17 T distance(const T* a, const T* b, std::size_t size) const override
18 {
19 return m_metric->distance(a, b, size);
20 }
21
22 T squared_distance(const T* a, const T* b, std::size_t size) const override
23 {
24 return m_metric->squared_distance(a, b, size);
25 }
26
27 // Adapter method for point types
29 const toolbox::types::point_t<T>& b) const
30 {
31 T arr_a[3] = {a.x, a.y, a.z};
32 T arr_b[3] = {b.x, b.y, b.z};
33 return distance(arr_a, arr_b, 3);
34 }
35
36private:
37 std::shared_ptr<IMetric<T>> m_metric;
38};
39
40} // namespace toolbox::metrics
Definition metric_factory.hpp:23
Definition point_metric_adapter.hpp:12
T squared_distance(const T *a, const T *b, std::size_t size) const override
Definition point_metric_adapter.hpp:22
T operator()(const toolbox::types::point_t< T > &a, const toolbox::types::point_t< T > &b) const
Definition point_metric_adapter.hpp:28
PointMetricAdapter(std::shared_ptr< IMetric< T > > metric)
Definition point_metric_adapter.hpp:14
T distance(const T *a, const T *b, std::size_t size) const override
Definition point_metric_adapter.hpp:17
Definition angular_metrics.hpp:11
3D点/向量模板类 / A 3D point/vector template class
Definition point.hpp:48
T x
X坐标 / X coordinate.
Definition point.hpp:51
T z
Z坐标 / Z coordinate.
Definition point.hpp:53
T y
Y坐标 / Y coordinate.
Definition point.hpp:52