Update everything

This commit is contained in:
2025-01-31 09:33:19 +03:00
parent c8f4ff5a4e
commit e5f22d47ab
62 changed files with 7585 additions and 1712 deletions

View File

@@ -216,21 +216,58 @@ struct RoadLinesProcessing {
int onext = (j + 1) % edges[i].neighbors.size();
Vector3 n1 = normal(node - neighbors[j]);
Vector3 n2 = normal(neighbors[onext] - node);
float angle = n1.signed_angle_to(
n2, Vector3(0, 1, 0));
Vector3 a0 = (neighbors[j] - node) * 0.5 +
node + n1 * 3.0f;
Vector3 a1 = node + n1 * road_side_width;
Vector3 b0 = node + n2 * road_side_width;
Vector3 b1 = (neighbors[onext] - node) * 0.5 +
node + n2 * 3.0f;
Vector3 q, r;
Geometry::get_closest_points_between_segments(
a0, a1, b0, b1, q, r);
Vector3 pr;
if (Vector2(q.x, q.z).distance_squared_to(
Vector2(r.x, r.z)) < 0.001f)
pr = q.linear_interpolate(r, 0.5f);
else
pr = node + n1 * road_side_width;
Vector3 q, r, pr;
if (angle < 0 || angle > Math_PI) {
Vector3 da = (a1 - a0).normalized() *
road_side_width * 2.0f;
Vector3 db = (b1 - b0).normalized() *
road_side_width * 2.0f;
Geometry::get_closest_points_between_segments(
a0 - da, a1 + da, b0 - db,
b1 + db, q, r);
if (Vector2(q.x, q.z)
.distance_squared_to(
Vector2(r.x, r.z)) <
0.005f)
pr = q.linear_interpolate(r,
0.5f);
else {
print_line(
"bad luck: " +
(q.operator String()) +
" -> " +
(r.operator String()));
float e =
Vector2(q.x, q.z).distance_squared_to(
Vector2(r.x,
r.z));
print_line("dst " +
String::num(e));
assert(false);
}
/* pr = node +
n1 * road_side_width; */
} else {
Geometry::get_closest_points_between_segments(
a0, a1, b0, b1, q, r);
if (Vector2(q.x, q.z)
.distance_squared_to(
Vector2(r.x, r.z)) <
0.001f)
pr = q.linear_interpolate(r,
0.5f);
else
pr = node +
n1 * road_side_width;
}
Vector3 o1 = (neighbors[j] - node) * 0.5 + node;
Vector3 o2 = node,
o3 = (neighbors[onext] - node) * 0.5 +
@@ -542,6 +579,11 @@ public:
this->center = center;
this->mid = mid;
this->edge = edge;
if (!(l2 >= l1 - 0.0001f && l2 >= l3 - 0.0001f))
print_line("bad parameters: l1 = " +
String::num(l1) +
" l2 = " + String::num(l2) +
" l3 = " + String::num(l3));
assert(l2 >= l1 - 0.0001f && l2 >= l3 - 0.0001f);
assert(l1 - 3.0f < 0.001f);
assert(l3 - 3.0f < 0.001f);