Exemple #1
0
/** Calculates the tangent for a given point on a bezier curve
 * @param p x- or y-values of four points describing the bezier
 * @param u position on the curve between[0 .. 1]
 * @return the x- or y-part of the tangent vector
 */
real
bezier_eval_tangent(const real p[4], real u)
{
  real A,B,C,D;
  bernstein_develop(p,&A,&B,&C,&D);
  return 3*A*u*u+2*B*u+C;
}  
Exemple #2
0
/** Evaluates the Bernstein polynoms for a given position
 * @param p x- or y-values of four points describing the bezier
 * @param u position on the curve [0 .. 1]
 * @returns the evaluate x- or y-part of the point
 */
real
bezier_eval(const real p[4], real u)
{
  real A,B,C,D;
  bernstein_develop(p,&A,&B,&C,&D);
  return A*u*u*u+B*u*u+C*u+D;
}
Exemple #3
0
int bicubicbezier_extrema(const double p[4],double u[2])
{
    double A,B,C,D,delta;

    bernstein_develop(p,&A,&B,&C,&D);
    delta = 4*B*B - 12*A*C;

    u[0] = u[1] = 0.0;
    if (delta<0) return 0;

    u[0] = (-2*B + sqrt(delta)) / (6*A);
    if (delta==0) return 1;
    u[1] = (-2*B - sqrt(delta)) / (6*A);
    return 2;
}
Exemple #4
0
/**
 * Calculates the extrma of the given curve in x- or y-direction.
 * @param p x- or y-values of four points describing the bezier
 * @param u The position of the extrema [0 .. 1]
 * @return The number of extrema found.
 */
static int
bicubicbezier_extrema(const real p[4],real u[2])
{
  real A,B,C,D,delta;

  bernstein_develop(p,&A,&B,&C,&D);
  delta = 4*B*B - 12*A*C;

  u[0] = u[1] = 0.0;
  if (delta<0) return 0;

  /* just a quadratic contribution? */
  if (fabs(A) < 1e-6) {
    u[0] = -C/(2*B);
    return 1;
  }

  u[0] = (-2*B + sqrt(delta)) / (6*A);
  if (delta==0) return 1;
  u[1] = (-2*B - sqrt(delta)) / (6*A);
  return 2;
}
Exemple #5
0
double bezier_eval_tangent(const double p[4], double u)
{
    double A,B,C,D;
    bernstein_develop(p,&A,&B,&C,&D);
    return 3*A*u*u+2*B*u+C;
}
Exemple #6
0
double bezier_eval(const double p[4], double u)
{
    double A,B,C,D;
    bernstein_develop(p,&A,&B,&C,&D);
    return A*u*u*u+B*u*u+C*u+D;
}