- //quadratic bezier line ( (1-i)^2*pa+2*i(1-i)*pb+i^2*pc )
- procedure TPath.DrawQSpline( AFrom, ATo, AControlPoint: TPoint );
- var di, i: double;
- p1,p2: TPoint;
- begin
- di := 1.0 / FSplinePrecision;
- i := di;
- p2 := AFrom;
- while i<=1.0 do
- begin
- if i-di/2 > 1.0-di then
- i := 1.0;
- p1 := p2;
- p2.X := (AFrom.X-2*AControlPoint.X+ATo.X)*sqr(i) + (2*AControlPoint.X-2*AFrom.X)*i + AFrom.X;
- p2.Y := (AFrom.Y-2*AControlPoint.Y+ATo.Y)*sqr(i) + (2*AControlPoint.Y-2*AFrom.Y)*i + AFrom.Y;
- if not EqualPoints( p1, p2 ) then
- NewStroke( p1, p2 ); //line
- i := i + di;
- end;
- //pc := p2; ?
- NewStroke( p2, ATo);
- end;