src/loc.rs

branch
dev
changeset 60
848ecc05becf
parent 59
9226980e45a7
child 62
d8305c9b6fdf
child 79
d63e40672dd6
equal deleted inserted replaced
59:9226980e45a7 60:848ecc05becf
576 fn origin() -> Self { 576 fn origin() -> Self {
577 Self::ORIGIN 577 Self::ORIGIN
578 } 578 }
579 } 579 }
580 580
581
582 /// The default norm for `Loc` is [`L2`].
583 impl<F : Float, const N : usize> Normed<F> for Loc<F, N> {
584 type NormExp = L2;
585
586 #[inline]
587 fn norm_exponent(&self) -> Self::NormExp {
588 L2
589 }
590
591 // #[inline]
592 // fn similar_origin(&self) -> Self {
593 // [F::ZERO; N].into()
594 // }
595
596 #[inline]
597 fn is_zero(&self) -> bool {
598 self.norm2_squared() == F::ZERO
599 }
600 }
601
602 impl<F : Float, const N : usize> HasDual<F> for Loc<F, N> {
603 type DualSpace = Self;
604 }
605
581 impl<F : Float, const N : usize> Norm<F, L2> for Loc<F, N> { 606 impl<F : Float, const N : usize> Norm<F, L2> for Loc<F, N> {
582 #[inline] 607 #[inline]
583 fn norm(&self, _ : L2) -> F { self.norm2() } 608 fn norm(&self, _ : L2) -> F { self.norm2() }
584 } 609 }
585 610
586 impl<F : Float, const N : usize> Dist<F, L2> for Loc<F, N> { 611 impl<F : Float, const N : usize> Dist<F, L2> for Loc<F, N> {
587 #[inline] 612 #[inline]
588 fn dist(&self, other : &Self, _ : L2) -> F { self.dist2(other) } 613 fn dist(&self, other : &Self, _ : L2) -> F { self.dist2(other) }
589 } 614 }
615
616 /* Implemented automatically as Euclidean.
617 impl<F : Float, const N : usize> Projection<F, L2> for Loc<F, N> {
618 #[inline]
619 fn proj_ball_mut(&mut self, ρ : F, nrm : L2) {
620 let n = self.norm(nrm);
621 if n > ρ {
622 *self *= ρ/n;
623 }
624 }
625 }*/
590 626
591 impl<F : Float, const N : usize> Norm<F, L1> for Loc<F, N> { 627 impl<F : Float, const N : usize> Norm<F, L1> for Loc<F, N> {
592 /// This implementation is not stabilised as it's meant to be used for very small vectors. 628 /// This implementation is not stabilised as it's meant to be used for very small vectors.
593 /// Use [`nalgebra`] for larger vectors. 629 /// Use [`nalgebra`] for larger vectors.
594 #[inline] 630 #[inline]

mercurial