#include "MGCLStdAfx.h" /********************************************************************/ /* Copyright (c) 2017 System fugen G.K. and Yuzi Mizuno */ /* All rights reserved. */ /********************************************************************/ #include "cskernel/b1bfac.h" #include "cskernel/b1bslv.h" #include "cskernel/b2vb.h" #if defined(_DEBUG) #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif // SUBROUTINE TO PRODUCE THE B-SPLINE COEF.S RCOEF OF THE SPLINE // OF ORDER k WITH KNOTS T(I),I=1,2,--,N+K , // GIVEN DATA POINTS TAU(I) AND ASSOCIATED DATA VAL(I,.). // THE VAL(I,J) TAKES POSITIONA DATA AT TAU(I) // FOR TAU(I-1) < TAU(I) < TAU(I+1) , // VAL(I,J) = D(F(TAU(I)), VAL(I+1,J) = F(TAU(I+1)), // FOR TAU(I-1)4 || ibcend<=0|| ibcend>4) goto L7000; if(nnp1) lftmax=np1; if(left=t[left+1]){ ++left; if(left>=lftmax) goto L7000; } //NOW T(LEFT) <= TAU(I) < T(LEFT+1), GET B-SPLINE BASIS FUNCTION AND STORE IN Q(.) b2vb_(k, npk, &t[1], taui, left, &work1[1]); iq = i-left+1+(left-k)*kpkm1; for(j=1; j<=k; ++j){ iq += kpkm2; q[iq] = work1[j]; } work2[i] = 1.f; }else{ //CASE OF MULTIPLE DATA POINT 1, 1ST DERIV. SPECIFIED. if(taui!=t[i+2] || taui!=t[i+3]) goto L7000; // ..FOR 1ST DERIV. DATA iq = i*kpkm1-km1; q[iq] = -.5f; q[iq+kpkm2] = .5f; work2[i] = (t[i+4]-t[i+1])/(fkm1*2.f); // CHECK 2ND MULTIPLICITY. if(i+2>nend) continue; if(taui