mourner / rbush

RBush — a high-performance JavaScript R-tree-based 2D spatial index for points and rectangles
MIT License
2.48k stars 237 forks source link

readme: hilight remove fn assumes coords not changed #101

Open kylezeeuwen opened 4 years ago

kylezeeuwen commented 4 years ago

Thank you for the great library !

I am using it in https://github.com/Displayr/rhtmlLabeledScatter which is a scatter / bubble plot library I have inherited and am heavily recfactoring. rbush has helped me clean up the collision detection logic used in the label placement algorithm.

I came across what I initially thought was a bug, but upon investigation it was me incorrectly using rbush.

The use case is that I am constantly moving the labels around, and checking for collisions. I observed that the remove call would not always remove the label rectangle. Upon investigating the remove implementation i realise that it optimises its tree traversal logic based on assumptions about the coordinates of the label rectangle. So if I change the x/y coords then call remove, sometimes the object would not get removed from the tree !

See the updates to the docs I made to hopefully save others some time. Happy to change wording/format etc.