17
0
mirror of https://github.com/MaSzyna-EU07/maszyna.git synced 2026-11-02 11:39:14 +01:00

feat(track): vertical unevenness comes near its limit more often, with longer buckles too

Fewer short waves: at uneven 18 the humps over 12.6 mm on the 10 m chord
go from 28 to 38 per km, with the peak still at 18 mm. Waves of 47-83 m
join them. They hardly count on that chord, the body rises and falls on
them.

The documentation tells how far unevenness goes before a pantograph
can't keep up. A wire rising fast enough trips the main breaker on a
straight track too: it does at tor0290 on Baltyk, over about 46 km/h.
This commit is contained in:
maj00r
2026-10-31 18:25:16 +01:00
parent e74bbf951f
commit 6aed9ec5bd
3 changed files with 16 additions and 8 deletions

View File

@@ -91,7 +91,7 @@ TEST_CASE("uneven track: measures as the Id-14 limits for its value")
CHECK(wander == doctest::Approx(10.0).epsilon(0.2));
CHECK(level == doctest::Approx(20.0).epsilon(0.1));
CHECK(j == doctest::Approx(5.3).epsilon(0.2));
CHECK(away < 25.0); // appendix 1a: 15 mm off the survey marks
CHECK(away < 40.0); // the long waves go past the 15 mm off the survey marks of appendix 1a
}
TEST_CASE("uneven track: a place strays the same every time")
@@ -100,7 +100,7 @@ TEST_CASE("uneven track: a place strays the same every time")
glm::dvec3 const place{1234.5, 0.0, -678.9};
auto const stray{track_uneven::field(place)};
CHECK(stray.x == doctest::Approx(0.309777548158).epsilon(1e-9));
CHECK(stray.y == doctest::Approx(-0.295557487607).epsilon(1e-9));
CHECK(stray.y == doctest::Approx(0.311350299745).epsilon(1e-9));
CHECK(stray.z == doctest::Approx(-0.328429734019).epsilon(1e-9));
CHECK(track_uneven::level(place, {1.0, 0.0, 0.0}) == doctest::Approx(0.53 * -0.178598957983).epsilon(1e-9));
CHECK(track_uneven::level(place, {0.0, 0.0, 1.0}) == doctest::Approx(0.53 * -0.868291889902).epsilon(1e-9));
@@ -127,13 +127,17 @@ TEST_CASE("uneven track: tracks laid towards each other meet at one cant")
TEST_CASE("uneven track: the field stays within its bound")
{
auto most{0.0};
auto highest{0.0};
for (int i = 0; i < 20000; ++i)
{
auto const stray{track_uneven::field({i * 3.7 - 30000.0, 0.0, i * -2.9 + 41000.0})};
most = std::max({most, std::abs(stray.x), std::abs(stray.y), std::abs(stray.z)});
most = std::max({most, std::abs(stray.x), std::abs(stray.z)});
highest = std::max(highest, std::abs(stray.y));
}
CHECK(most <= 1.0);
CHECK(most > 0.5);
CHECK(highest <= 1.69);
CHECK(highest > 0.5);
}
TEST_CASE("uneven track: the value along a track meets its neighbours exactly")