Skip to content

Commit 4b593b2

Browse files
committed
highlighted methods
1 parent c1fc319 commit 4b593b2

File tree

1 file changed

+62
-72
lines changed

1 file changed

+62
-72
lines changed

AlgorithmsLibrary/FourierDescAlgm/FourierDescClass.cs

Lines changed: 62 additions & 72 deletions
Original file line numberDiff line numberDiff line change
@@ -6,16 +6,16 @@ namespace AlgorithmsLibrary
66
public class Fourier
77
{
88
private double polyLineLength;
9-
private int fourierSeriesLength;
10-
private double[,] XParameter;
11-
private double[,] YParameter;
9+
private readonly int fourierSeriesLength;
10+
private readonly double[,] XParameter;
11+
private readonly double[,] YParameter;
1212

13-
private List<MapPoint> arrayOfMapPoints;
14-
private int countOfPointsObject;
15-
private double[] S; //sequentialPolylineLength
13+
private readonly List<MapPoint> arrayOfMapPoints;
14+
private readonly int countOfPointsObject;
15+
private double[] sequentialPolylineLength;
1616
private double[] arrayDistancesBetweenPoints;
1717

18-
private bool FourierClosedType;
18+
private readonly bool FourierClosedType;
1919

2020
public Fourier(List<MapPoint> mapPoints, int fourierSeriesLength, double approximationRatio, bool FourierClosedType)
2121
{
@@ -66,7 +66,7 @@ private void AddSymmetricPolyline()
6666
MapPoint startPoint = arrayOfMapPoints[0];
6767
MapPoint endPoint = arrayOfMapPoints[basePointCount - 1];
6868
Line SymmetryAxis = new Line(startPoint, endPoint);
69-
69+
7070
for (int i = basePointCount; i < countOfPointsObject; i++)
7171
{
7272
MapPoint SymmetryPoint = SymmetryAxis.GetSymmetricPoint(arrayOfMapPoints[countOfPointsObject - 1 - i]);
@@ -77,7 +77,7 @@ private void AddSymmetricPolyline()
7777
public void GetAllDist()
7878
{
7979
arrayDistancesBetweenPoints = new double[countOfPointsObject - 1];
80-
S = new double[countOfPointsObject];
80+
sequentialPolylineLength = new double[countOfPointsObject];
8181

8282
if (!FourierClosedType)
8383
AddSymmetricPolyline();
@@ -90,22 +90,64 @@ public void GetAllDist()
9090
arrayDistancesBetweenPoints[i] = p1.DistanceToVertex(p2);
9191
}
9292

93-
S[0] = 0.0;
93+
sequentialPolylineLength[0] = 0.0;
9494
for (int i = 1; i < countOfPointsObject; i++)
9595
{
96-
double previousSequentialLength = S[i - 1];
97-
S[i] = previousSequentialLength + arrayDistancesBetweenPoints[i - 1];
96+
double previousSequentialLength = sequentialPolylineLength[i - 1];
97+
sequentialPolylineLength[i] = previousSequentialLength + arrayDistancesBetweenPoints[i - 1];
9898
}
9999

100-
polyLineLength = S[countOfPointsObject - 1];
100+
polyLineLength = sequentialPolylineLength[countOfPointsObject - 1];
101+
}
102+
103+
public double GetRealParameter(int k, double angle)
104+
{
105+
double TK1 = arrayOfMapPoints[k + 1].X;
106+
double TK = arrayOfMapPoints[k].X;
107+
double SK1 = sequentialPolylineLength[k + 1];
108+
double SK = sequentialPolylineLength[k];
109+
110+
double divTS = (TK1 - TK) / (SK1 - SK);
111+
112+
double SinK1 = Math.Sin(angle * SK1);
113+
double SinK = Math.Sin(angle * SK);
114+
double CosK1 = Math.Cos(angle * SK1);
115+
double CosK = Math.Cos(angle * SK);
116+
117+
double v1 = (TK - divTS * SK) * (SinK1 - SinK) / angle;
118+
double v2 = divTS * (SinK1 * SK1 - SinK * SK) / angle;
119+
double v3 = divTS * (CosK1 - CosK) / (angle * angle);
120+
121+
return (v1 + v2 + v3) * 2 / polyLineLength;
122+
}
123+
124+
public double GetImagineParameter(int k, double angle)
125+
{
126+
double TK1 = arrayOfMapPoints[k + 1].X;
127+
double TK = arrayOfMapPoints[k].X;
128+
double SK1 = sequentialPolylineLength[k + 1];
129+
double SK = sequentialPolylineLength[k];
130+
131+
double divTS = (TK1 - TK) / (SK1 - SK);
132+
133+
double SinK1 = Math.Sin(angle * SK1);
134+
double SinK = Math.Sin(angle * SK);
135+
double CosK1 = Math.Cos(angle * SK1);
136+
double CosK = Math.Cos(angle * SK);
137+
138+
double v1 = -(TK - divTS * SK) * (CosK1 - CosK) / angle;
139+
double v2 = -divTS * (CosK1 * SK1 - CosK * SK) / angle;
140+
double v3 = divTS * (SinK1 - SinK) / (angle * angle);
141+
142+
return (v1 + v2 + v3) * 2 / polyLineLength;
101143
}
102144

103145
public double[,] GetFourierXparameter()
104146
{
105147
for (int k = 0; k < countOfPointsObject - 1; k++)
106148
{
107149
double diffX = arrayOfMapPoints[k + 1].X - arrayOfMapPoints[k].X;
108-
double diffS = S[k + 1] - S[k];
150+
double diffS = sequentialPolylineLength[k + 1] - sequentialPolylineLength[k];
109151
double summ1 = arrayOfMapPoints[k].X * diffS;
110152
double summ2 = 0.5 * diffX * diffS;
111153
XParameter[0, 0] += (summ1 + summ2) / polyLineLength;
@@ -116,38 +158,12 @@ public void GetAllDist()
116158
double angle = 2.0 * Math.PI * n / polyLineLength;
117159
for (int k = 0; k < countOfPointsObject - 1; k++)
118160
{
119-
double XK1 = arrayOfMapPoints[k + 1].X;
120-
double XK = arrayOfMapPoints[k].X;
121-
double divXS = (XK1 - XK) / (S[k + 1] - S[k]);
122-
123-
double SinK1 = Math.Sin(angle * S[k + 1]);
124-
double SinK = Math.Sin(angle * S[k]);
125-
double CosK1 = Math.Cos(angle * S[k + 1]);
126-
double CosK = Math.Cos(angle * S[k]);
127-
128-
double v1 = (XK - divXS * S[k]) * (SinK1 - SinK) / angle;
129-
double v2 = divXS * (SinK1 * S[k + 1] - SinK * S[k]) / angle;
130-
double v3 = divXS * (CosK1 - CosK) / (angle * angle);
131-
132-
XParameter[n, 0] += (v1 + v2 + v3) * 2 / polyLineLength;
161+
XParameter[n, 0] += GetRealParameter(k, angle);
133162
}
134163

135164
for (int k = 0; k < countOfPointsObject - 1; k++)
136165
{
137-
double XK1 = arrayOfMapPoints[k + 1].X;
138-
double XK = arrayOfMapPoints[k].X;
139-
double divXS = (XK1 - XK) / (S[k + 1] - S[k]);
140-
141-
double SinK1 = Math.Sin(angle * S[k + 1]);
142-
double SinK = Math.Sin(angle * S[k]);
143-
double CosK1 = Math.Cos(angle * S[k + 1]);
144-
double CosK = Math.Cos(angle * S[k]);
145-
146-
double v1 = -(XK - divXS * S[k]) * (CosK1 - CosK) / angle;
147-
double v2 = - divXS * (CosK1 * S[k + 1] - CosK * S[k]) / angle;
148-
double v3 = divXS * (SinK1 - SinK) / (angle * angle);
149-
150-
XParameter[n, 1] += (v1 + v2 + v3) * 2 / polyLineLength;
166+
XParameter[n, 1] += GetImagineParameter(k, angle);
151167
}
152168
}
153169

@@ -158,7 +174,7 @@ public void GetAllDist()
158174
for (int k = 0; k < countOfPointsObject - 1; k++)
159175
{
160176
double diffY = arrayOfMapPoints[k + 1].Y - arrayOfMapPoints[k].Y;
161-
double diffS = S[k + 1] - S[k];
177+
double diffS = sequentialPolylineLength[k + 1] - sequentialPolylineLength[k];
162178
double summ1 = arrayOfMapPoints[k].Y * diffS;
163179
double summ2 = 0.5 * diffY * diffS;
164180
YParameter[0, 0] += (summ1 + summ2) / polyLineLength;
@@ -169,38 +185,12 @@ public void GetAllDist()
169185
double angle = 2.0 * Math.PI * n / polyLineLength;
170186
for (int k = 0; k < countOfPointsObject - 1; k++)
171187
{
172-
double YK1 = arrayOfMapPoints[k + 1].Y;
173-
double YK = arrayOfMapPoints[k].Y;
174-
double divYS = (YK1 - YK) / (S[k + 1] - S[k]);
175-
176-
double SinK1 = Math.Sin(angle * S[k + 1]);
177-
double SinK = Math.Sin(angle * S[k]);
178-
double CosK1 = Math.Cos(angle * S[k + 1]);
179-
double CosK = Math.Cos(angle * S[k]);
180-
181-
double v1 = (YK - divYS * S[k]) * (SinK1 - SinK) / angle;
182-
double v2 = divYS * (SinK1 * S[k + 1] - SinK * S[k]) / angle;
183-
double v3 = divYS * (CosK1 - CosK) / (angle * angle);
184-
185-
YParameter[n, 0] += (v1 + v2 + v3) * 2 / polyLineLength;
188+
YParameter[n, 0] += GetRealParameter(k, angle);
186189
}
187190

188191
for (int k = 0; k < countOfPointsObject - 1; k++)
189192
{
190-
double YK1 = arrayOfMapPoints[k + 1].Y;
191-
double YK = arrayOfMapPoints[k].Y;
192-
double divYS = (YK1 - YK) / (S[k + 1] - S[k]);
193-
194-
double SinK1 = Math.Sin(angle * S[k + 1]);
195-
double SinK = Math.Sin(angle * S[k]);
196-
double CosK1 = Math.Cos(angle * S[k + 1]);
197-
double CosK = Math.Cos(angle * S[k]);
198-
199-
double v1 = - (YK - divYS * S[k]) * (CosK1 - CosK) / angle;
200-
double v2 = - divYS * (CosK1 * S[k + 1] - CosK * S[k]) / angle;
201-
double v3 = divYS * (SinK1 - SinK) / (angle * angle);
202-
203-
YParameter[n, 1] += (v1 + v2 + v3) * 2 / polyLineLength;
193+
YParameter[n, 1] += GetImagineParameter(k, angle);
204194
}
205195
}
206196

@@ -234,4 +224,4 @@ public List<MapPoint> GetRecoveryPoints(int OutputPointCount)
234224
return RecoveryPoints;
235225
}
236226
}
237-
}
227+
}

0 commit comments

Comments
 (0)