Update everything
This commit is contained in:
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user