You can have a look at my blog post: http://alokgandhi.com/blog/2012/05/28/barycentric-coordinates-and-the-magic-of-locations/
On Wed, Jul 17, 2013 at 12:58 PM, Ben Houston <b...@exocortex.com> wrote: > BTW here is our code for calculating barycoordinates from points and > creating points from barycoordinates: > > template<class T> > class Triangle3 { > public: > Vec3<T> a; > Vec3<T> b; > Vec3<T> c; > > Matrix44<T> getPointToBarycoordMatrix() const; > Matrix44<T> getBarycoordToPointMatrix() const; > }; > > template<class T> > inline Matrix44<T> Triangle3<T>::getPointToBarycoordMatrix() const { > M44x pointToBarycoordMatrix; > bool success = inverseSafe( pointToBarycoordMatrix, > getBarycoordToPointMatrix() ); > if( ! success ) { > T oneThird = ((T)1.0)/((T)3.0); > //Vec3<T> center = ( a + b + c ) * oneThird; > return Matrix44<T>( > 0, 0, 0, 0, > 0, 0, 0, 0, > 0, 0, 0, 0, > oneThird, oneThird, oneThird, 0); > } > return pointToBarycoordMatrix; > } > > template<class T> > inline Matrix44<T> Triangle3<T>::getBarycoordToPointMatrix() const { > Vec3<T> n = normal(); > return Matrix44<T>( > a[0], a[1], a[2], 1, > b[0], b[1], b[2], 1, > c[0], c[1], c[2], 1, > n[0], n[1], n[2], 0); > } > > And this you just multiple your point by the "pointToBarycoordMatrix" > matrix to get barycoords. And if you have barycoordinates, multiply > it by "getBarycoordToPointMatrix()" to get your point. > > We are using 4 coordinate barycoordinates where the fourth element is > the distance from the triangle plane in the normal direction. Just > set it to zero and you should be fine. The above can be converted to > Softimage Matrix types pretty easily. Probably could be added to the > Softimage SDK as well if it isn't already there. > > Best regards, > -ben > > > On Wed, Jul 17, 2013 at 12:04 PM, Ben Houston <b...@exocortex.com> wrote: > > So barycoords for a triangle works well and I believe there are tons > > of references on the web for this. Barycoordinates for polygons is a > > bit more problematic because they are no longer linear but rather > > polynomials and thus harder to calculate. I'd stick with triangles > > and then all those web references should work well. > > > > Is your problem calculating them from points? > > > > Basically this is a great guide: > > > > http://en.wikipedia.org/wiki/Barycentric_coordinate_system > > > > -ben > > > > > > On Wed, Jul 17, 2013 at 11:38 AM, <p...@bustykelp.com> wrote: > >> Hi, I have spent days on this and I cant work it out > >> > >> I have a selection of points (not on a flat plane) and I have a test > >> position. > >> It returns an array that represents the weighting, related to the > proximity > >> to the other points. > >> > >> I want to have it so that when the test position is directly at a > point, the > >> value for that point in the array = 1 > >> and the rest will be zero > >> as the test point moves around the area it interpolates these values, > but > >> they always add up to 1 > >> > >> It sounds really easy, but I’ve been literally* tearing my hair out over > >> this for days. > >> > >> Ive managed to get barycentric interpolation working for a flat plane, > and > >> only 3 points, but I need it to accept multiple points in 3d space. > >> > >> Please help. I’m going bonkers over this > >> > >> Paul > >> > >> *(not really literally) > > > > > > > > -- > > Best regards, > > Ben Houston > > Voice: 613-762-4113 Skype: ben.exocortex Twitter: @exocortexcom > > http://Exocortex.com - Passionate CG Software Professionals. > > > > -- > Best regards, > Ben Houston > Voice: 613-762-4113 Skype: ben.exocortex Twitter: @exocortexcom > http://Exocortex.com - Passionate CG Software Professionals. > > --