Line data Source code
1 : /**
2 : Bojan Nikolic <b.nikolic@mrao.cam.ac.uk>, <bojan@bnikolic.co.uk>
3 : Initial version September 2010.
4 : Maintained by ESO since 2013.
5 :
6 : This file is part of LibAIR and is licensed under GNU Public
7 : License Version 2
8 :
9 : \file antennautils.cpp
10 : Renamed antennautils.cc 2023
11 :
12 : */
13 :
14 : #include "antennautils.h"
15 :
16 :
17 : namespace LibAIR2 {
18 58 : AntSetD antsDist(const antpos_t &pos,
19 : size_t i,
20 : const AntSet &flag)
21 : {
22 58 : AntSetD dist;
23 1130 : for (size_t j=0; j<pos.nrow(); ++j)
24 : {
25 1072 : if (j==i or flag.count(j))
26 140 : continue;
27 932 : double d=std::sqrt(std::pow(pos(j,0)-pos(i,0),2)+
28 932 : std::pow(pos(j,1)-pos(i,1),2)+
29 932 : std::pow(pos(j,2)-pos(i,2),2));
30 932 : dist.insert(std::make_pair(d, j));
31 : }
32 58 : return dist;
33 0 : }
34 :
35 0 : AntSet nearestAnts(const antpos_t &pos,
36 : size_t i,
37 : const AntSet &flag,
38 : size_t n)
39 : {
40 0 : AntSetD dist=antsDist(pos, i, flag);
41 0 : AntSet res;
42 0 : AntSetD::const_iterator s=dist.begin();
43 0 : for (size_t j=0; j<n; ++j)
44 : {
45 0 : res.insert(s->second);
46 0 : ++s;
47 : }
48 0 : return res;
49 0 : }
50 :
51 0 : AntSetWeight linNearestAnt(const antpos_t &pos,
52 : size_t i,
53 : const AntSet &flag,
54 : size_t n)
55 : {
56 0 : AntSetD dist=antsDist(pos, i, flag);
57 0 : AntSetWeight res;
58 :
59 0 : double total=0;
60 0 : AntSetD::const_iterator s=dist.begin();
61 0 : for (size_t j=0; j<n; ++j)
62 : {
63 0 : total+=s->first;
64 0 : ++s;
65 : }
66 :
67 0 : s=dist.begin();
68 0 : for (size_t j=0; j<n; ++j)
69 : {
70 0 : res.insert(std::make_pair(s->first/total, s->second));
71 0 : ++s;
72 : }
73 :
74 0 : return res;
75 :
76 0 : }
77 :
78 : }
79 :
80 :
|