How do I find hash value of a 3D vector?

杀马特。学长 韩版系。学妹 提交于 2019-12-04 14:14:20

问题


I am trying to perform broad-phase collision detection with a fixed-grid size approach. Thus, for each entity's position: (x,y,z) (each of type float), I need to find which cell does the entity lie in. I then intend to store all the cells in a hash-table and then iterate through to report (if any) collisions.

So, here is what I am doing: Grid-cell's position: (int type) (Gx, Gy, Gz) => (x / M, y / M, z / M) where M is the size of the grid.

Once, I have a cell, I'd like to add it to a hash-table with its key being a unique hash based on (Gx, Gy, Gz) and the value being the cell itself. Now, I cannot think of a good hash function and I need some help with that.

Can someone please suggest me a good hash function?

Thanks


回答1:


If someone is still interested in this, I figured out a solution that works over here:

http://www.gamedev.net/community/forums/topic.asp?topic_id=567378




回答2:


The grid approach is going to have problems near the boundaries of the grid boxes. Why not use BSP trees instead?




回答3:


My preferred hashing function for this kind of vector is to rotate the bits of each component by a different constant and XOR them together.

It's very fast, and the bit rotations are helpful to reduce collisions and ensure as much of the key space as possible is used.




回答4:


here are a few references you could look at. Warren's papers discuss the hash algorithm in detail:

A parallel hashed Oct-Tree N-body algorithm

A portable parallel particle program



来源:https://stackoverflow.com/questions/2582340/how-do-i-find-hash-value-of-a-3d-vector

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!