| 1071 | } |
| 1072 | |
| 1073 | void LASquadtree::intersect_tile_with_cells(const F32 ll_x, const F32 ll_y, const F32 ur_x, const F32 ur_y, const F32 cell_min_x, const F32 cell_max_x, const F32 cell_min_y, const F32 cell_max_y, U32 level, U32 level_index) |
| 1074 | { |
| 1075 | volatile float cell_mid_x; |
| 1076 | volatile float cell_mid_y; |
| 1077 | if (level) |
| 1078 | { |
| 1079 | level--; |
| 1080 | level_index <<= 2; |
| 1081 | |
| 1082 | cell_mid_x = (cell_min_x + cell_max_x)/2; |
| 1083 | cell_mid_y = (cell_min_y + cell_max_y)/2; |
| 1084 | |
| 1085 | if (ur_x <= cell_mid_x) |
| 1086 | { |
| 1087 | // cell_max_x = cell_mid_x; |
| 1088 | if (ur_y <= cell_mid_y) |
| 1089 | { |
| 1090 | // cell_max_y = cell_mid_y; |
| 1091 | intersect_tile_with_cells(ll_x, ll_y, ur_x, ur_y, cell_min_x, cell_mid_x, cell_min_y, cell_mid_y, level, level_index); |
| 1092 | } |
| 1093 | else if (!(ll_y < cell_mid_y)) |
| 1094 | { |
| 1095 | // cell_min_y = cell_mid_y; |
| 1096 | // level_index |= 1; |
| 1097 | intersect_tile_with_cells(ll_x, ll_y, ur_x, ur_y, cell_min_x, cell_mid_x, cell_mid_y, cell_max_y, level, level_index | 2); |
| 1098 | } |
| 1099 | else |
| 1100 | { |
| 1101 | intersect_tile_with_cells(ll_x, ll_y, ur_x, ur_y, cell_min_x, cell_mid_x, cell_min_y, cell_mid_y, level, level_index); |
| 1102 | intersect_tile_with_cells(ll_x, ll_y, ur_x, ur_y, cell_min_x, cell_mid_x, cell_mid_y, cell_max_y, level, level_index | 2); |
| 1103 | } |
| 1104 | } |
| 1105 | else if (!(ll_x < cell_mid_x)) |
| 1106 | { |
| 1107 | // cell_min_x = cell_mid_x; |
| 1108 | // level_index |= 1; |
| 1109 | if (ur_y <= cell_mid_y) |
| 1110 | { |
| 1111 | // cell_max_y = cell_mid_y; |
| 1112 | intersect_tile_with_cells(ll_x, ll_y, ur_x, ur_y, cell_mid_x, cell_max_x, cell_min_y, cell_mid_y, level, level_index | 1); |
| 1113 | } |
| 1114 | else if (!(ll_y < cell_mid_y)) |
| 1115 | { |
| 1116 | // cell_min_y = cell_mid_y; |
| 1117 | // level_index |= 1; |
| 1118 | intersect_tile_with_cells(ll_x, ll_y, ur_x, ur_y, cell_mid_x, cell_max_x, cell_mid_y, cell_max_y, level, level_index | 3); |
| 1119 | } |
| 1120 | else |
| 1121 | { |
| 1122 | intersect_tile_with_cells(ll_x, ll_y, ur_x, ur_y, cell_mid_x, cell_max_x, cell_min_y, cell_mid_y, level, level_index | 1); |
| 1123 | intersect_tile_with_cells(ll_x, ll_y, ur_x, ur_y, cell_mid_x, cell_max_x, cell_mid_y, cell_max_y, level, level_index | 3); |
| 1124 | } |
| 1125 | } |
| 1126 | else |
| 1127 | { |
| 1128 | if (ur_y <= cell_mid_y) |
| 1129 | { |
| 1130 | // cell_max_y = cell_mid_y; |
nothing calls this directly
no outgoing calls
no test coverage detected