Seems to be a variation of a method in one of the Game Programming Gems, except he's not sorting by distance to origin, but has 2-3 seperate lists sorted by x/y/z coordinate.
Your approach has the advantage of using only one list, but the disadvantage that theoretically you end up comparing objects that are far away but just happen to have the same distance to the origin.
And here I see one (very minor catch): when do you abort your tests? When the first object thats a neighbor in your list turns out to be too far away? Won't work. You'd still have to stick with the difference in distance to origin. Considering the vastness of space that shouldn't happen often enough to worry about.
So your test (each object only tests to the right in the list):
if (pre- or recalculated distance to origin - my distance to origin > threshold) abort
Their test (also only to the right):
if (his x - my x < threshold) if (his y - my y < threshold) if (his z - my z < threshold)
One requires more work keeping your lists (and uses more memory), but the test is easier, the other is less maintenance, but a little more testing.
I think for games happening in a smaller area I'd prefer their method, but for huge space yours might be preferable (less if's are always good and you could store the determined distance for each object and the squared threshold).
Edit:
Did you consider really huge objects? Say objects that are so large you don't want to use the largest objects size as threshold for collision tests, yet dont want to a seperate approach for them?
For the other method I think it's pretty simple. Sort by "low" edge and always compare upper edge to neighbours lower edge. In your approach you'd probably need to calculate min and max distance to origin and always compare max to neighbours min.
[Edited by - Trienco on August 20, 2009 12:58:22 AM]