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"
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
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"
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