code: public static void updateTextureCoordinates( Mesh mesh, 
                                                   List<DelaunayTriangle> triangles,
                                                   double scale,
                                                   Point o,
                                                   Point u, 
                                                   Point v )
      {
          FloatBuffer tcBuf;
          float x,y,a,b;        
          final float ox = (float)scale*o.getXf();
          final float oy = (float)scale*o.getYf();
          final float ux = (float)scale*u.getXf();
          final float uy = (float)scale*u.getYf();
          final float vx = (float)scale*v.getXf();
          final float vy = (float)scale*v.getYf();
          final float vCu = (vx*uy-vy*ux);
          final boolean doX = Math.abs( ux ) > Math.abs( uy );
          
          tcBuf = prepareTextureCoordinateBuffer(mesh,0,2*3*triangles.size());
          tcBuf.rewind();
  
          for( DelaunayTriangle t : triangles )
          {
              for( int i=0; i<3; i++ )
              {
                  x = t.points[i].getXf()-ox;
                  y = t.points[i].getYf()-oy;
  
                  // Calculate the texture coordinate in the UV plane
                  a = (uy*x - ux*y)/vCu;                
                  if( doX )
                  {
                      b = (x - a*vx)/ux;
                  }
                  else
                  {
                      b = (y - a*vy)/uy;                    
                  }                
                  tcBuf.put( a );
                  tcBuf.put( b );
              }
          }
      }
docs: Assuming:
  1. That given U anv V aren't collinear.
  2. That O,U and V can be projected in the XY plane
  
  @param mesh
  @param triangles
  @param o
  @param u
  @param v