| OLD | NEW | 
|---|
| 1 /* | 1 /* | 
| 2 http://stackoverflow.com/questions/2009160/how-do-i-convert-the-2-control-points
     -of-a-cubic-curve-to-the-single-control-poi | 2 http://stackoverflow.com/questions/2009160/how-do-i-convert-the-2-control-points
     -of-a-cubic-curve-to-the-single-control-poi | 
| 3 */ | 3 */ | 
| 4 | 4 | 
| 5 /* | 5 /* | 
| 6 Let's call the control points of the cubic Q0..Q3 and the control points of the 
     quadratic P0..P2. | 6 Let's call the control points of the cubic Q0..Q3 and the control points of the 
     quadratic P0..P2. | 
| 7 Then for degree elevation, the equations are: | 7 Then for degree elevation, the equations are: | 
| 8 | 8 | 
| 9 Q0 = P0 | 9 Q0 = P0 | 
| 10 Q1 = 1/3 P0 + 2/3 P1 | 10 Q1 = 1/3 P0 + 2/3 P1 | 
| 11 Q2 = 2/3 P1 + 1/3 P2 | 11 Q2 = 2/3 P1 + 1/3 P2 | 
| 12 Q3 = P2 | 12 Q3 = P2 | 
| 13 In your case you have Q0..Q3 and you're solving for P0..P2. There are two ways t
     o compute P1 from | 13 In your case you have Q0..Q3 and you're solving for P0..P2. There are two ways t
     o compute P1 from | 
| 14  the equations above: | 14  the equations above: | 
| 15 | 15 | 
| 16 P1 = 3/2 Q1 - 1/2 Q0 | 16 P1 = 3/2 Q1 - 1/2 Q0 | 
| 17 P1 = 3/2 Q2 - 1/2 Q3 | 17 P1 = 3/2 Q2 - 1/2 Q3 | 
| 18 If this is a degree-elevated cubic, then both equations will give the same answe
     r for P1. Since | 18 If this is a degree-elevated cubic, then both equations will give the same answe
     r for P1. Since | 
| 19  it's likely not, your best bet is to average them. So, | 19  it's likely not, your best bet is to average them. So, | 
| 20 | 20 | 
| 21 P1 = -1/4 Q0 + 3/4 Q1 + 3/4 Q2 - 1/4 Q3 | 21 P1 = -1/4 Q0 + 3/4 Q1 + 3/4 Q2 - 1/4 Q3 | 
| 22 | 22 | 
| 23 |  | 
| 24 SkDCubic defined by: P1/2 - anchor points, C1/C2 control points | 23 SkDCubic defined by: P1/2 - anchor points, C1/C2 control points | 
| 25 |x| is the euclidean norm of x | 24 |x| is the euclidean norm of x | 
| 26 mid-point approx of cubic: a quad that shares the same anchors with the cubic an
     d has the | 25 mid-point approx of cubic: a quad that shares the same anchors with the cubic an
     d has the | 
| 27  control point at C = (3·C2 - P2 + 3·C1 - P1)/4 | 26  control point at C = (3·C2 - P2 + 3·C1 - P1)/4 | 
| 28 | 27 | 
| 29 Algorithm | 28 Algorithm | 
| 30 | 29 | 
| 31 pick an absolute precision (prec) | 30 pick an absolute precision (prec) | 
| 32 Compute the Tdiv as the root of (cubic) equation | 31 Compute the Tdiv as the root of (cubic) equation | 
| 33 sqrt(3)/18 · |P2 - 3·C2 + 3·C1 - P1|/2 · Tdiv ^ 3 = prec | 32 sqrt(3)/18 · |P2 - 3·C2 + 3·C1 - P1|/2 · Tdiv ^ 3 = prec | 
| (...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 178         for (int idx = 0; idx < last; ++idx) { | 177         for (int idx = 0; idx < last; ++idx) { | 
| 179             part = subDivide(inflectT[idx], inflectT[idx + 1]); | 178             part = subDivide(inflectT[idx], inflectT[idx + 1]); | 
| 180             addTs(part, precision, inflectT[idx], inflectT[idx + 1], ts); | 179             addTs(part, precision, inflectT[idx], inflectT[idx + 1], ts); | 
| 181         } | 180         } | 
| 182         part = subDivide(inflectT[last], 1); | 181         part = subDivide(inflectT[last], 1); | 
| 183         addTs(part, precision, inflectT[last], 1, ts); | 182         addTs(part, precision, inflectT[last], 1, ts); | 
| 184         return; | 183         return; | 
| 185     } | 184     } | 
| 186     addTs(*this, precision, 0, 1, ts); | 185     addTs(*this, precision, 0, 1, ts); | 
| 187 } | 186 } | 
| OLD | NEW | 
|---|