NURBS book A2.2 Parameters ---------- i : int Span index. u : float Parameter value. order : int B-spline order. knots : ndarray Knot vector. out : ndarray B-spline basis function values. Returns ------- None.
(i: int, u: float, order: int, knots: Array, out: Array)
| 455 | |
| 456 | @njiti |
| 457 | def nbBasis(i: int, u: float, order: int, knots: Array, out: Array): |
| 458 | """ |
| 459 | NURBS book A2.2 |
| 460 | |
| 461 | Parameters |
| 462 | ---------- |
| 463 | i : int |
| 464 | Span index. |
| 465 | u : float |
| 466 | Parameter value. |
| 467 | order : int |
| 468 | B-spline order. |
| 469 | knots : ndarray |
| 470 | Knot vector. |
| 471 | out : ndarray |
| 472 | B-spline basis function values. |
| 473 | |
| 474 | Returns |
| 475 | ------- |
| 476 | None. |
| 477 | |
| 478 | """ |
| 479 | |
| 480 | out[0] = 1.0 |
| 481 | |
| 482 | left = np.zeros_like(out) |
| 483 | right = np.zeros_like(out) |
| 484 | |
| 485 | for j in range(1, order + 1): |
| 486 | left[j] = u - knots[i + 1 - j] |
| 487 | right[j] = knots[i + j] - u |
| 488 | |
| 489 | saved = 0.0 |
| 490 | |
| 491 | for r in range(j): |
| 492 | temp = out[r] / (right[r + 1] + left[j - r]) |
| 493 | out[r] = saved + right[r + 1] * temp |
| 494 | saved = left[j - r] * temp |
| 495 | |
| 496 | out[j] = saved |
| 497 | |
| 498 | |
| 499 | @njiti |
no outgoing calls