/* * Copyright (C) 1998, 2000-2007, 2010, 2011, 2012, 2013 SINTEF ICT, * Applied Mathematics, Norway. * * Contact information: E-mail: tor.dokken@sintef.no * SINTEF ICT, Department of Applied Mathematics, * P.O. Box 124 Blindern, * 0314 Oslo, Norway. * * This file is part of SISL. * * SISL is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * SISL is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public * License along with SISL. If not, see * . * * In accordance with Section 7(b) of the GNU Affero General Public * License, a covered work must retain the producer line in every data * file that is created or manipulated using SISL. * * Other Usage * You can be released from the requirements of the license by purchasing * a commercial license. Buying such a license is mandatory as soon as you * develop commercial activities involving the SISL library without * disclosing the source code of your own applications. * * This file may be used in accordance with the terms contained in a * written agreement between you and SINTEF ICT. */ #include "sisl-copyright.h" /* * * $Id: s1381.c,v 1.2 2001-03-19 15:58:48 afr Exp $ * */ #define S1381 #include "sislP.h" #if defined(SISLNEEDPROTOTYPES) void s1381(double et[],int in,int ik,double **gt,int *jkn,int jkk,int *jstat) #else void s1381(et,in,ik,gt,jkn,jkk,jstat) double et[]; int in; int ik; double **gt; int *jkn; int jkk; int *jstat; #endif /* ********************************************************************* * ********************************************************************* * * PURPOSE : Make the knot vector for the representing a spline * basis of order jkk with the same knot values as et. * This basis is used e.g. for representing the silhouette line * functions of a surface. jkk = 2*ik-2 for ordinary silhouette jkk = 3*ik-3 for perspective silhouette jkk = 3*ik-3 for circular silhouette * * INPUT : et - Knots of input spline basis * in - Number of vertices in input basis * ik - Order of input basis * jkk - Order of B-spline basis produced * * OUTPUT : gt - Pointer to array of knots. The array is allocated * inside this routine. * jkn - Number of vertices * * jstat - status messages * > 0 : warning * = 0 : ok * < 0 : error * METHOD : * * REFERENCES : * *- * CALLS : * * WRITTEN BY : Tor Dokken, SI, 88-11. * REVISED BY : Mike Floater, SI, 91-04 jkk is input not output. * ********************************************************************* */ { double tval; /* Value of knot */ double *sdum; /* Pointer to knot array */ int ki,kl; /* Variable in loop */ int knumb; /* Number of intervals */ int kstop; /* Loop stop variable */ int kpos=0; /* Position of error */ /* Run through the knot vector to decide how many intervals exist */ knumb = 0; tval = et[ik-1]; for (ki=ik ; ki<=in ; ki++) { if (tval < et[ki]) { /* New knot value found */ knumb = knumb + 1; tval = et[ki]; } } *jkn = (jkk-1)*(knumb-1) + jkk; sdum = newarray(*jkn+jkk,DOUBLE); if (sdum == SISL_NULL) goto err101; *gt = sdum; /* Make knot values */ tval = et[ik-1]; /* Make jkk first knot values */ for (kl=0;kl