Revert "Track the distances found in the douglas-peucker recursion"

This reverts commit e5361f8c22.
This commit is contained in:
Erica Fischer
2024-08-05 10:56:47 -07:00
parent a9445d2a69
commit ac117558d8
+7 -16
View File
@@ -829,7 +829,9 @@ void douglas_peucker(drawvec &geom, int start, int n, double e, size_t kept, siz
if (geom[start + first] < geom[start + second]) {
farthest_element_index = first;
for (i = first + 1; i < second; i++) {
double distance = distance_from_line(geom[start + i].x, geom[start + i].y, geom[start + first].x, geom[start + first].y, geom[start + second].x, geom[start + second].y);
double temp_dist = distance_from_line(geom[start + i].x, geom[start + i].y, geom[start + first].x, geom[start + first].y, geom[start + second].x, geom[start + second].y);
double distance = std::fabs(temp_dist);
if ((distance > e || kept < retain) && (distance > max_distance || (distance == max_distance && geom[start + i] < geom[start + farthest_element_index]))) {
farthest_element_index = i;
@@ -839,7 +841,9 @@ void douglas_peucker(drawvec &geom, int start, int n, double e, size_t kept, siz
} else {
farthest_element_index = second;
for (i = second - 1; i > first; i--) {
double distance = distance_from_line(geom[start + i].x, geom[start + i].y, geom[start + second].x, geom[start + second].y, geom[start + first].x, geom[start + first].y);
double temp_dist = distance_from_line(geom[start + i].x, geom[start + i].y, geom[start + second].x, geom[start + second].y, geom[start + first].x, geom[start + first].y);
double distance = std::fabs(temp_dist);
if ((distance > e || kept < retain) && (distance > max_distance || (distance == max_distance && geom[start + i] < geom[start + farthest_element_index]))) {
farthest_element_index = i;
@@ -850,20 +854,7 @@ void douglas_peucker(drawvec &geom, int start, int n, double e, size_t kept, siz
if (max_distance >= 0) {
// mark idx as necessary
signed char nec;
if (kept < retain) {
nec = 127; // arbitrary N vertices that must be kept at every zoom to retain polygon validity
} else if (max_distance > 0.25) {
// These are quarter-zoom distances, so fractional simplifications are still meaningful.
nec = std::log2(std::ceil(max_distance * 4)) + 1;
} else {
nec = 1; // smallest representable distance from the line
}
if (nec <= 0) {
fprintf(stderr, "can't happen: necessary %d for distance %f\n", nec, max_distance);
exit(EXIT_IMPOSSIBLE);
}
geom[start + farthest_element_index].necessary = nec;
geom[start + farthest_element_index].necessary = 1;
kept++;
if (geom[start + first] < geom[start + second]) {