Visual Computing Library
Loading...
Searching...
No Matches
functions.h
1/*****************************************************************************
2 * VCLib *
3 * Visual Computing Library *
4 * *
5 * Copyright(C) 2021-2025 *
6 * Visual Computing Lab *
7 * ISTI - Italian National Research Council *
8 * *
9 * All rights reserved. *
10 * *
11 * This program is free software; you can redistribute it and/or modify *
12 * it under the terms of the Mozilla Public License Version 2.0 as published *
13 * by the Mozilla Foundation; either version 2 of the License, or *
14 * (at your option) any later version. *
15 * *
16 * This program is distributed in the hope that it will be useful, *
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
19 * Mozilla Public License Version 2.0 *
20 * (https://www.mozilla.org/en-US/MPL/2.0/) for more details. *
21 ****************************************************************************/
22
23#ifndef VCL_ALGORITHMS_CORE_DISTANCE_FUNCTIONS_H
24#define VCL_ALGORITHMS_CORE_DISTANCE_FUNCTIONS_H
25
26#include "element.h"
27#include "misc.h"
28
29#include <vclib/concepts/mesh.h>
30
31namespace vcl {
32
33namespace detail {
34
48template<typename Obj1, typename Obj2, typename ST>
49concept BoundedDistFunctionExists =
50 requires (Obj1 o1, Obj2 o2, ST v) { boundedDistance(o1, o2, v); };
51
52} // namespace detail
53
80template<typename Obj1, typename Obj2>
82{
83 auto f = [](const Obj1& o1, const Obj2& o2) {
84 return distance(o1, o2);
85 };
86
87 return f;
88}
89
129template<typename Obj1, typename Obj2, typename ScalarType = double>
131{
132 if constexpr (detail::BoundedDistFunctionExists<Obj1, Obj2, ScalarType>) {
133 auto f = [](const Obj1& o1, const Obj2& o2, ScalarType s) {
134 return boundedDistance(o1, o2, s);
135 };
136
137 return f;
138 }
139 else {
140 auto f = [](const Obj1& o1, const Obj2& o2, ScalarType) {
141 return distance(o1, o2);
142 };
143
144 return f;
145 }
146}
147
148} // namespace vcl
149
150#endif // VCL_ALGORITHMS_CORE_DISTANCE_FUNCTIONS_H
A class representing a line segment in n-dimensional space. The class is parameterized by a PointConc...
Definition segment.h:43
auto boundedDistFunction()
Return a proper bounded distance function between a Obj1 object and an Obj2 object.
Definition functions.h:130
auto distFunction()
Return a proper dist function between a Obj1 object and an Obj2 object.
Definition functions.h:81
auto boundedDistance(const PointType &p, const FaceType &f, ScalarType maxDist, PointType &closest, bool signedDist=false)
Compute the distance between a 3D point and a face.
Definition element.h:110
auto distance(const VertexType &v, const PointType &p)
Computes the distance between a Vertex and a 3D point.
Definition element.h:50