#include "MGCLStdAfx.h" /********************************************************************/ /* Copyright (c) 2017 System fugen G.K. and Yuzi Mizuno */ /* All rights reserved. */ /********************************************************************/ // bkcrng_ WILL CONVERT THE OLD KNOT SEQUENCE t[] INTO tnew[] SO THAT // tnew[k-1]=tstrt, tnew[n]=tend, AND MULTIPLICITY OF tnew[I] AND tnew[n+I] // HOLD. (0<=I<=k-1). // WHEN k=0, t IS ASSUMED AS DATA POINT SEQUENCE. // *** INPUT * // n,k,t[n+k]....INPUT KNOT VECTOR OF A B-REP, // n:B-REP DIMENSION, k:ORDER, t[.]:KNOT VECTOR // k MAY BE 0, AND INDICATES t[.] ARE DATA POINTS. // tstrt,tend.......NEW PARAMETER RANGE OF NEW KNOT VECTOR,I.E. // VALUES SUCH THAT tnew[k-1]=tstrt AND tnew[n]=tend // *** OUTPUT * // tnew[n+k].....NEW KNOT VECTOR OBTAINED // tnew MAY BE THE SAME AREA AS t. void bkcrng_(int k, int n, const double *t, double tstrt, double tend, double *tnew){ // Local variables double tatk,r; int i, i1, ie, is, np1, nmk; // Parameter adjustments --tnew; --t; // Function Body if(k>0){ // CASE OF KNOT VECTOR CONVERT. np1 = n+1; tatk = t[k]; r = (tend-tstrt) / (t[np1]-tatk); nmk = n-k; for(i=1; i<=nmk; ++i) tnew[i+k] = tstrt+(t[i+k]-tatk)*r; // COMPUTE MULTIPLICITY for(is=1; is