How to perform spatial partitioning in n-dimensions?

Posted by kevin42 on Stack Overflow See other posts from Stack Overflow or by kevin42
Published on 2010-04-09T18:44:00Z Indexed on 2010/04/09 19:03 UTC
Read the original article Hit count: 362

Filed under:
|

I'm trying to design an implementation of Vector Quantization as a c++ template class that can handle different types and dimensions of vectors (e.g. 16 dimension vectors of bytes, or 4d vectors of doubles, etc).

I've been reading up on the algorithms, and I understand most of it:

here and here

I want to implement the Linde-Buzo-Gray (LBG) Algorithm, but I'm having difficulty figuring out the general algorithm for partitioning the clusters. I think I need to define a plane (hyperplane?) that splits the vectors in a cluster so there is an equal number on each side of the plane.

[edit to add more info] This is an iterative process, but I think I start by finding the centroid of all the vectors, then use that centroid to define the splitting plane, get the centroid of each of the sides of the plane, continuing until I have the number of clusters needed for the VQ algorithm (iterating to optimize for less distortion along the way). The animation in the first link above shows it nicely.

My questions are:

What is an algorithm to find the plane once I have the centroid?

How can I test a vector to see if it is on either side of that plane?

© Stack Overflow or respective owner

Related posts about math

Related posts about algorithm