/*! * 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; }
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 ); }