FACT++  1.0
Ring.cc
Go to the documentation of this file.
1 #include "Ring.h"
2 
3 #include <iostream>
4 
5 #include <math.h>
6 
7 #include "Led.h"
8 
9 using namespace std;
10 
11 Ring::Ring(double x, double y) :
12  fX(x), fY(y), fR(0), fPhi(0)
13 {
14 }
15 
17 {
18  double h1 = i.GetY() - j.GetY();
19 
20  if (h1==0)
21  {
22  std::swap(j, k);
23  h1 = i.GetY() - j.GetY();
24  if (h1==0)
25  {
26  cout << "Ring::CalcCenter: h1==0" <<endl;
27  return false;
28  }
29  }
30 
31  double h2 = j.GetY() - k.GetY();
32 
33  if (h2==0)
34  {
35  std::swap(i, j);
36  h2 = j.GetY() - k.GetY();
37  if (h2==0)
38  {
39  cout << "Ring::CalcCenter: h2==0" << endl;
40  return false;
41  }
42  }
43 
44  const double w1 = i.GetX() - j.GetX();
45  const double w2 = j.GetX() - k.GetX();
46 
47  const double m1 = -w1/h1;
48  const double m2 = -w2/h2;
49 
50  if (m2 - m1==0)
51  {
52  cout << "Ring::CalcCenter: All three points in a row! (m2-m1==0)" << endl;
53  return false;
54  }
55 
56  fX = ((m2*(j.GetX() + k.GetX()) + i.GetY() - k.GetY() -m1*(i.GetX() + j.GetX()))/(m2-m1)/2);
57  fY = ((m2*(i.GetY() + j.GetY()) + m1*m2*(k.GetX() - i.GetX())-m1*(j.GetY() + k.GetY()))/(m2-m1)/2);
58 
59  fR = hypot(fX - i.GetX(), fY - i.GetY());
60 
61  fMag = (i.GetMag() + j.GetMag() + k.GetMag())/3;
62 
63  return true;
64 }
65 
66 void Ring::InterpolCenters(const vector<Ring> &rings)
67 {
68  fX = 0;
69  fY = 0;
70  fR = 0;
71 
72  fMag=0;
73 
74  const int n=rings.size();
75  if (n==0)
76  return;
77 
78  for (auto it=rings.begin(); it!=rings.end(); it++)
79  {
80  fX += it->GetX();
81  fY += it->GetY();
82  fR += it->GetR();
83  fMag += it->GetMag();
84  }
85 
86  fX /= n;
87  fY /= n;
88  fR /= n;
89  fMag /= n;
90 }
Ring(double x=0, double y=0)
Definition: Ring.cc:11
double GetMag() const
Definition: Led.h:44
int i
Definition: db_dim_client.c:21
double GetY() const
Definition: Led.h:42
Definition: Led.h:8
STL namespace.
void InterpolCenters(const std::vector< Ring > &rings)
Definition: Ring.cc:66
double fMag
Definition: Ring.h:18
double fR
Definition: Ring.h:15
double fX
Definition: Ring.h:13
double GetX() const
Definition: Led.h:41
double fY
Definition: Ring.h:14
bool CalcCenter(Led, Led, Led)
Definition: Ring.cc:16