Example #1
0
/*!
 * Deforms a point in the STU space into another point in the STU space using a lattice.
 */
MPoint ffdPlanar::getDeformedPoint( MPoint& point,
                                    MVector (& lattice)[FFD_LATTICE_POINTS_S][FFD_LATTICE_POINTS_T][FFD_LATTICE_POINTS_U] )
{
    MPoint ffd1 = MPoint();
    MVector ffd2 = MVector();
    MVector ffd3 = MVector();
    
    for ( int i = 0; i < FFD_LATTICE_POINTS_S; i++ )
    {
        for ( int j = 0; j < FFD_LATTICE_POINTS_T; j++ )
        {
            for ( int k = 0; k < FFD_LATTICE_POINTS_U; k++ )
            {
                double bernstein_u = bernsteinPoly( k, FFD_DIMENSIONS_U, point.z);
                ffd3 += lattice[i][j][k] * bernstein_u;
            }
            
            double bernstein_t = bernsteinPoly( j, FFD_DIMENSIONS_T, point.y );
            ffd2 += ffd3 * bernstein_t;
                        
            ffd3.x = 0;
            ffd3.y = 0;
            ffd3.z = 0;
        }
        
        double bernstein_s = bernsteinPoly( i, FFD_DIMENSIONS_S, point.x );
        ffd1 += ffd2 * bernstein_s;
        
        ffd2.x = 0;
        ffd2.y = 0;
        ffd2.z = 0;
    }
    
    return ffd1;
}
Example #2
0
QPointF QgsDxfPaintEngine::bezierPoint( const QList<QPointF>& controlPolygon, double t )
{
  double x = 0;
  double y = 0;
  int cPolySize = controlPolygon.size();
  double bPoly  = 0;

  QList<QPointF>::const_iterator it = controlPolygon.constBegin();
  int i = 0;
  for ( ; it != controlPolygon.constEnd(); ++it )
  {
    bPoly = bernsteinPoly( cPolySize - 1, i, t );
    x += ( it->x() * bPoly );
    y += ( it->y() * bPoly );
    ++i;
  }

  return QPointF( x, y );
}