Math-BSpline-Curve
view release on metacpan or search on metacpan
lib/Math/BSpline/Curve.pm view on Meta::CPAN
package Math::BSpline::Curve;
$Math::BSpline::Curve::VERSION = '0.002';
use 5.014;
use warnings;
# ABSTRACT: B-spline curves
use Moo 2.002005;
use List::Util 1.26 ('min');
use Ref::Util 0.010 ('is_plain_arrayref');
use Log::Any 1.044 ('$logger');
use Math::BSpline::Basis 0.001;
has '_degree' => (
is => 'ro',
required => 1,
init_arg => 'degree',
);
has '_knot_vector' => (
is => 'ro',
init_arg => 'knot_vector',
predicate => 1,
);
has 'control_points' => (
is => 'lazy',
builder => sub { return [] },
);
has 'basis' => (
is => 'lazy',
handles => [
'degree',
'knot_vector',
],
builder => sub {
my ($self) = @_;
return Math::BSpline::Basis->new(
degree => $self->_degree,
(
$self->_has_knot_vector
? (knot_vector => $self->_knot_vector)
: (),
),
)
}
);
sub evaluate {
my ($self, $u) = @_;
my $basis = $self->basis;
my $p = $self->degree;
my $P = $self->control_points;
my $s = $basis->find_knot_span($u);
my $Nip = $basis->evaluate_basis_functions($s, $u);
return undef if (!@$P);
( run in 2.076 seconds using v1.01-cache-2.11-cpan-98e64b0badf )