示例#1
0
 def NURBSbasis(self,uv,i=None,j=None):
     """Evaluate one basis function given uv, a (2,-1) matrix"""
     if uv.shape[1]>1:
         if i!=None and j!=None:
             uspan = NURBSinC.multiFindSpan(self.n,self.p,uv[0],self.U)
             Nu = NURBSinC.multiBasisFuns(uspan,uv[0],self.p,self.U)
             vspan = NURBSinC.multiFindSpan(self.m,self.q,uv[1],self.V)
             Nv = NURBSinC.multiBasisFuns(vspan,uv[1],self.q,self.V)
             denominator = np.zeros(uv.shape[1],)
             for k in xrange(self.n+1):
                 for l in xrange(self.m+1):
                     denominator += Nu[:,k]*Nv[:,l]*self.w[k,l]
             return Nu[:,i]*Nv[:,j]*self.w[i,j] / denominator
         else:
             return NURBSinC.multiSurfaceBasis(uv,self.p,self.n,self.U,self.q,self.m,self.V,self.w)
     else:
         print "Need to 'NURBSbasis' for single point"
示例#2
0
 def NURBS_basis_functions(self,xi,num_derivatives=0):
     xi = np.asarray(xi,np.float).reshape(-1,)
     spans = NURBSinC.multiFindSpan(self.n,self.p,xi,self.U)
     if num_derivatives==1:
         N = NURBSinC.multidersNURBSbasis(spans,xi,self.p,1,self.U,self.w)
     else:
         N = np.zeros((xi.size,1,self.n+1))
         N[:,0,:] = NURBSinC.multiNURBSbasis(spans,xi,self.p,self.U,self.w)
     return N
示例#3
0
 def NURBSbasis(self, uv, i=None, j=None):
     """Evaluate one basis function given uv, a (2,-1) matrix"""
     if uv.shape[1] > 1:
         if i != None and j != None:
             uspan = NURBSinC.multiFindSpan(self.n, self.p, uv[0], self.U)
             Nu = NURBSinC.multiBasisFuns(uspan, uv[0], self.p, self.U)
             vspan = NURBSinC.multiFindSpan(self.m, self.q, uv[1], self.V)
             Nv = NURBSinC.multiBasisFuns(vspan, uv[1], self.q, self.V)
             denominator = np.zeros(uv.shape[1], )
             for k in xrange(self.n + 1):
                 for l in xrange(self.m + 1):
                     denominator += Nu[:, k] * Nv[:, l] * self.w[k, l]
             return Nu[:, i] * Nv[:, j] * self.w[i, j] / denominator
         else:
             return NURBSinC.multiSurfaceBasis(uv, self.p, self.n, self.U,
                                               self.q, self.m, self.V,
                                               self.w)
     else:
         print "Need to 'NURBSbasis' for single point"
示例#4
0
 def NURBS_basis_functions(self, xi, num_derivatives=0):
     xi = np.asarray(xi, np.float).reshape(-1, )
     spans = NURBSinC.multiFindSpan(self.n, self.p, xi, self.U)
     if num_derivatives == 1:
         N = NURBSinC.multidersNURBSbasis(spans, xi, self.p, 1, self.U,
                                          self.w)
     else:
         N = np.zeros((xi.size, 1, self.n + 1))
         N[:, 0, :] = NURBSinC.multiNURBSbasis(spans, xi, self.p, self.U,
                                               self.w)
     return N