スプライン その 8
制御点から,曲線の 1 点を求める.
Vd4	b_spline	(const Vd4A& pnts,c_v_double& knot,const size_t order,const double t_)
{
	double	t  = t_ ;
	Vd4 	pnt ;
	if (knot.size() == 0)	{	return	pnt ;	}
	double	v0 = knot[0] ;
	double	v1 = knot[knot.size()-1] ;
	if (v0 > v1)	    	{	return	pnt ;	}
	if (t  < v0)     	{	t = v0 ;    	}
	if (v1 <  t)     	{	t = v1 ;    	}
	for (size_t i=0 ; i<pnts.size() ; i++) {
		double	bs = ::BS_basis(t,knot,order,i) ;
		double	w = pnts[i].w ;
		pnt.x += pnts[i].x * bs * w ;
		pnt.y += pnts[i].y * bs * w ;
		pnt.z += pnts[i].z * bs * w ;
		pnt.w += pnts[i].w * bs ;
		}
	if (pnt.w != 0) {
		Vd3	pt3 = Vd3(pnt.x,pnt.y,pnt.z) ;
		pnt = Vd4(pt3/pnt.w,pnt.w) ;
		}
	return	pnt ;
	}
曲線を求めるループ部分
{
//	...
	Vd4A	vd3a ;
	double	v0 = knot[0] ;
	double	v1 = knot[knot.size()-1] ;
	double	vt = (v1-v0) / div_c ;
	size_t	count = 0 ;
	for (double j=v0 ; count<=div_c && j<v1*1.0001 ; j+=vt , count++)
	{
		double	t = j ;
		if (count == div_c)	{	t = v1 ;	}
		Vd4 	pnt = ::b_spline(pnts,knot,order,t) ;
		vd3a.push_back(pnt) ;
		}
	return	vd3a ;
	}
前回のコードでは

今回のコード



















広告