------------------------------------------------------------------------
| 83 | |
| 84 | //------------------------------------------------------------------------ |
| 85 | void bspline::prepare() |
| 86 | { |
| 87 | if(m_num > 2) |
| 88 | { |
| 89 | int i, k, n1; |
| 90 | double* temp; |
| 91 | double* r; |
| 92 | double* s; |
| 93 | double h, p, d, f, e; |
| 94 | |
| 95 | for(k = 0; k < m_num; k++) |
| 96 | { |
| 97 | m_am[k] = 0.0; |
| 98 | } |
| 99 | |
| 100 | n1 = 3 * m_num; |
| 101 | |
| 102 | pod_array<double> al(n1); |
| 103 | temp = &al[0]; |
| 104 | |
| 105 | for(k = 0; k < n1; k++) |
| 106 | { |
| 107 | temp[k] = 0.0; |
| 108 | } |
| 109 | |
| 110 | r = temp + m_num; |
| 111 | s = temp + m_num * 2; |
| 112 | |
| 113 | n1 = m_num - 1; |
| 114 | d = m_x[1] - m_x[0]; |
| 115 | e = (m_y[1] - m_y[0]) / d; |
| 116 | |
| 117 | for(k = 1; k < n1; k++) |
| 118 | { |
| 119 | h = d; |
| 120 | d = m_x[k + 1] - m_x[k]; |
| 121 | f = e; |
| 122 | e = (m_y[k + 1] - m_y[k]) / d; |
| 123 | al[k] = d / (d + h); |
| 124 | r[k] = 1.0 - al[k]; |
| 125 | s[k] = 6.0 * (e - f) / (h + d); |
| 126 | } |
| 127 | |
| 128 | for(k = 1; k < n1; k++) |
| 129 | { |
| 130 | p = 1.0 / (r[k] * al[k - 1] + 2.0); |
| 131 | al[k] *= -p; |
| 132 | s[k] = (s[k] - r[k] * s[k - 1]) * p; |
| 133 | } |
| 134 | |
| 135 | m_am[n1] = 0.0; |
| 136 | al[n1 - 1] = s[n1 - 1]; |
| 137 | m_am[n1 - 1] = al[n1 - 1]; |
| 138 | |
| 139 | for(k = n1 - 2, i = 0; i < m_num - 2; i++, k--) |
| 140 | { |
| 141 | al[k] = al[k] * al[k + 1] + s[k]; |
| 142 | m_am[k] = al[k]; |
no outgoing calls
no test coverage detected