Exemple #1
0
void CircleCurve::setRadius(float x)
{
	m_radius = x;
	const float delta = PI / 18.f;
	float a, b, r;
    for(int i = 0; i < 37; i++) {
		if(m_eccentricity > 0.f && m_eccentricity < 1.f) {
			a = m_radius;
			b = sqrt( 1.f - m_eccentricity * m_eccentricity) * a;
			r = a * b / sqrt(a * a * cos(delta * i) * cos(delta * i) + b * b * sin(delta * i) * sin(delta * i));
		}
		else
			r = m_radius;
		
		m_cvs[i].set(sin(delta * i) * r, cos(delta * i) * r, 0.f);
	}
	computeKnots();
}
BSpline::BSpline(int m, int n, int resolution, BSPoint *control)
    :n_control_points(m), n_degree(n), knots(std::vector<int>(m+n+2, 0)), curve(new CvPoint[resolution])
{
	double increment, interval;
	BSPoint tmp_point;
	int output_index;
    
	computeKnots();
	increment = (double) (m - n + 1)/(resolution - 1); // why ?
	interval = 0;    

    for (output_index = 0; output_index < resolution - 1; ++output_index){
        computePoint(control, &tmp_point, interval);
        curve[output_index].x = round(tmp_point.x);
        curve[output_index].y = round(tmp_point.y);
        interval += increment;
    }
	curve[resolution-1].x=control[m].x;
	curve[resolution-1].y=control[m].y;
}