NURBS book A3.2 with modifications to handle periodicity. Parameters ---------- u : Array Parameter values. order : int B-spline order. dorder : int Derivative order. knots : Array Knot vector. pts : Array Control points.
(
u: Array, order: int, dorder: int, knots: Array, pts: Array, periodic: bool = False
)
| 665 | |
| 666 | @njit |
| 667 | def nbCurveDer( |
| 668 | u: Array, order: int, dorder: int, knots: Array, pts: Array, periodic: bool = False |
| 669 | ) -> Array: |
| 670 | """ |
| 671 | NURBS book A3.2 with modifications to handle periodicity. |
| 672 | |
| 673 | Parameters |
| 674 | ---------- |
| 675 | u : Array |
| 676 | Parameter values. |
| 677 | order : int |
| 678 | B-spline order. |
| 679 | dorder : int |
| 680 | Derivative order. |
| 681 | knots : Array |
| 682 | Knot vector. |
| 683 | pts : Array |
| 684 | Control points. |
| 685 | periodic : bool, optional |
| 686 | Periodicity flag. The default is False. |
| 687 | |
| 688 | |
| 689 | Returns |
| 690 | ------- |
| 691 | Array |
| 692 | Curve values and derivatives. |
| 693 | |
| 694 | """ |
| 695 | # number of control points |
| 696 | nb = pts.shape[0] |
| 697 | |
| 698 | # handle periodicity |
| 699 | u_, knots_ext, minspan, maxspan, deltaspan = _preprocess(u, order, knots, periodic) |
| 700 | |
| 701 | # number of param values |
| 702 | nu = np.size(u) |
| 703 | |
| 704 | # chunk size |
| 705 | n = order + 1 |
| 706 | |
| 707 | # temp chunk storage |
| 708 | temp = np.zeros((dorder + 1, n)) |
| 709 | |
| 710 | # initialize |
| 711 | out = np.zeros((nu, dorder + 1, 3)) |
| 712 | |
| 713 | for i in range(nu): |
| 714 | ui = u_[i] |
| 715 | |
| 716 | # find span |
| 717 | span = nbFindSpan(ui, order, knots, minspan, maxspan) + deltaspan |
| 718 | |
| 719 | # evaluate chunk |
| 720 | nbBasisDer(span, ui, order, dorder, knots_ext, temp) |
| 721 | |
| 722 | # multiply by ctrl points |
| 723 | for j in range(order + 1): |
| 724 | for k in range(dorder + 1): |
no test coverage detected