-
Notifications
You must be signed in to change notification settings - Fork 0
/
plot.cpp
84 lines (67 loc) · 2.26 KB
/
plot.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
#include <stdio.h>
#include <math.h>
#define PLUS 1.0
#define MINUS -1.0
#define UP 2
#define DOWN 3
#define pi 3.1415926535897932384626433832795
double alpha = 0.1;
double chi_n_norm(double pm, double phi) {
return sqrt(sin(phi) * sin(phi) + pow(pm - cos(phi), 2));
}
double p_so(double pm) {
return sqrt(1 + alpha*alpha) - pm * alpha;
}
double p_x_so(double pm, double phi) {
return sqrt(pow(p_so(pm),2) - pow(sin(phi), 2));
}
double chi_n(double pm, int component, double phi) {
if (component == UP) {
return (-cos(phi) + pm) / chi_n_norm(pm, phi);
} else {
return sin(phi) / chi_n_norm(pm, phi);
}
}
double chi_so_norm(double pm, double phi) {
return sqrt(
pow(-p_x_so(pm, phi) + pm * p_so(pm), 2)
+ pow(sin(phi), 2)
);
}
double chi_so(double pm, int component, double phi) {
if (component == UP) {
return (-p_x_so(pm, phi) + pm * p_so(pm)) / chi_so_norm(pm, phi);
} else {
return sin(phi) / chi_so_norm(pm, phi);
}
}
inline double A(double phi) {
return p_x_so(PLUS, phi) / cos(phi) + 1.0;
}
inline double C(double phi) {
return p_x_so(MINUS, phi) / cos(phi) + 1.0;
}
inline double B(double phi) {
return alpha / cos(phi);
}
int main(int argc, char** argv) {
for (double phi = 0.01; phi < pi / 2.0; phi += 0.01) {
double nom = 2.0 * (
chi_n(PLUS, UP, phi) * (C(phi) + B(phi)) * chi_so(MINUS, DOWN, phi)
- chi_n(PLUS, DOWN, phi) * (C(phi) - B(phi)) * chi_so(MINUS, UP, phi)
);
double denom =
(A(phi) - B(phi)) * (C(phi) + B(phi)) * chi_so(MINUS, DOWN, phi)
* chi_so(PLUS, UP, phi)
-(A(phi) + B(phi)) * (C(phi) - B(phi)) * chi_so(MINUS, UP, phi)
* chi_so(PLUS, DOWN, phi);
if (isnan(nom/denom))
break;
printf("%.5f\t%.5f\t%.5f\t%.5f\n", phi, nom/denom,
chi_n(PLUS, UP, phi) * (C(phi) + B(phi)) * chi_so(MINUS, DOWN, phi),
- chi_n(PLUS, DOWN, phi) * (C(phi) - B(phi)) * chi_so(MINUS, UP, phi)
);
}
}
/* vim: ts=4 sw=4 expandtab
*/