| 96 | } |
| 97 | |
| 98 | void Interpolate_Bspline(xVec3* data, xVec3* control, F32* knots, U32 nodata) |
| 99 | { |
| 100 | F32* alpha; |
| 101 | F32* beta; |
| 102 | F32* gamma; |
| 103 | |
| 104 | U32 i; |
| 105 | |
| 106 | F32 t1; |
| 107 | F32 t2; |
| 108 | F32 t3; |
| 109 | F32 t4; |
| 110 | F32 t5; |
| 111 | |
| 112 | F32 diff_43; |
| 113 | F32 diff_41; |
| 114 | F32 diff_32; |
| 115 | F32 diff_52; |
| 116 | |
| 117 | alpha = (F32*)RwMalloc(nodata * 4); |
| 118 | beta = (F32*)RwMalloc(nodata * 4); |
| 119 | gamma = (F32*)RwMalloc(nodata * 4); |
| 120 | |
| 121 | if (nodata > 2) |
| 122 | { |
| 123 | knots = knots + 1; |
| 124 | |
| 125 | for (i = 1; i < nodata - 1; i += 1) |
| 126 | { |
| 127 | alpha = alpha + 1; |
| 128 | beta = beta + 1; |
| 129 | gamma = gamma + 1; |
| 130 | |
| 131 | t1 = knots[1]; |
| 132 | t2 = knots[2]; |
| 133 | t3 = knots[3]; |
| 134 | t4 = knots[4]; |
| 135 | t5 = knots[5]; |
| 136 | |
| 137 | diff_41 = t4 - t1; |
| 138 | diff_43 = t4 - t3; |
| 139 | diff_32 = t3 - t2; |
| 140 | diff_52 = t5 - t2; |
| 141 | |
| 142 | *alpha = (diff_43 * diff_43) / diff_41; |
| 143 | *beta = ((t3 - t1) * diff_43) / diff_41 + ((t5 - t3) * diff_32) / diff_52; |
| 144 | *gamma = (diff_32 * diff_32) / diff_52; |
| 145 | |
| 146 | t4 = t4 - t2; |
| 147 | *alpha = *alpha / t4; |
| 148 | *beta = *beta / t4; |
| 149 | *gamma = *gamma / t4; |
| 150 | } |
| 151 | } |
| 152 | Tridiag_Solve(alpha, beta, gamma, data, control + 1, nodata); |
| 153 | |
| 154 | RwFree(alpha); |
| 155 | RwFree(beta); |
no test coverage detected