149{
151 return 360.0 *
rad / (2.0 *
M_PI);
152 };
153
155 return (2.0 *
M_PI * deg) / 360.0;
156 };
157
158 float avgL = (l1 +
l2) / 2.0;
159 float c1 = std::sqrt(std::pow(a1, 2) + std::pow(b1, 2));
160 float c2 = std::sqrt(std::pow(a2, 2) + std::pow(b2, 2));
161 float avgC = (c1 + c2) / 2.0;
162 float g = (1.0 - std::sqrt(std::pow(avgC, 7) / (std::pow(avgC, 7) + std::pow(25.0, 7)))) / 2.0;
163
164 float a1p = a1 * (1.0 + g);
165 float a2p = a2 * (1.0 + g);
166
167 float c1p = std::sqrt(std::pow(a1p, 2) + std::pow(b1, 2));
168 float c2p = std::sqrt(std::pow(a2p, 2) + std::pow(b2, 2));
169
170 float avgCp = (c1p + c2p) / 2.0;
171
172 float h1p =
rad2deg(std::atan2(b1, a1p));
173 if (h1p < 0.0) {
174 h1p = h1p + 360.0;
175 }
176
177 float h2p =
rad2deg(std::atan2(b2, a2p));
178 if (h2p < 0.0) {
179 h2p = h2p + 360;
180 }
181
182 float avghp = std::abs(h1p - h2p) > 180.0 ? (h1p + h2p + 360.0) / 2.0 : (h1p + h2p) / 2.0;
183
184 float t = 1.0 - 0.17 * std::cos(
deg2rad(avghp - 30.0)) + 0.24 * std::cos(
deg2rad(2.0 * avghp)) + 0.32 * std::cos(
deg2rad(3.0 * avghp + 6.0)) - 0.2 * std::cos(
deg2rad(4.0 * avghp - 63.0));
185
186 float deltahp = h2p - h1p;
187 if (std::abs(deltahp) > 180.0) {
188 if (h2p <= h1p) {
189 deltahp += 360.0;
190 }
191 else {
192 deltahp -= 360.0;
193 }
194 }
195
196 float deltalp =
l2 - l1;
197 float deltacp = c2p - c1p;
198
199 deltahp = 2.0 * std::sqrt(c1p * c2p) * std::sin(
deg2rad(deltahp) / 2.0);
200
201 float sl = 1.0 + ((0.015 * std::pow(avgL - 50.0, 2)) / std::sqrt(20.0 + std::pow(avgL - 50.0, 2)));
202 float sc = 1.0 + 0.045 * avgCp;
203 float sh = 1.0 + 0.015 * avgCp * t;
204
205 float deltaro = 30.0 * std::exp(-(std::pow((avghp - 275.0) / 25.0, 2)));
206 float rc = 2.0 * std::sqrt(std::pow(avgCp, 7) / (std::pow(avgCp, 7) + std::pow(25.0, 7)));
207 float rt = -rc * std::sin(2.0 *
deg2rad(deltaro));
208
209 float kl = 1;
210 float kc = 1;
211 float kh = 1;
212
213 float delta_e00 = std::sqrt(std::pow(deltalp / (kl * sl), 2) + std::pow(deltacp / (kc * sc), 2) + std::pow(deltahp / (kh * sh), 2) + rt * (deltacp / (kc * sc)) * (deltahp / (kh * sh)));
214 return delta_e00;
215}
#define M_PI
Definition ExtrusionSimulator.cpp:31
constexpr T deg2rad(const T angle)
Definition Geometry.hpp:312
T rad2deg(T angle)
Definition Geometry.hpp:310
T l2(const boost::geometry::model::d2::point_xy< T > &v)
Definition ExtrusionSimulator.cpp:177