
    3j                         S SK Jr  S SKrS SKJr  S SKJrJrJr  S SKJ	r	J
r
  S SKJr  S SKJr  S SKJrJr  S	S
/rSS\R&                  S\S\R&                  4S jjr " S S	\R,                  5      rS\S\4S jrg)    )OptionalN)nn)KORNIA_CHECKKORNIA_CHECK_SHAPEKORNIA_CHECK_TYPE)_unwrap_wrap)_torch_svd_cast)batched_dot_product)ScalarVector3
Hyperplane	fit_planevepsreturnc                 P    X -  R                  SSS9U-   nXR                  5       -  $ )NT)dimkeepdim)sumrsqrt)r   r   norm_sqs      O/home/wildlama/miniconda3/lib/python3.13/site-packages/kornia/geometry/plane.py
normalizedr   #   s*    ukkb$k/#5G}}    c            
       H  ^  \ rS rSrSrS\S\SS4U 4S jjrS\4S jr	S\4S	 jr
\S\4S
 j5       r\S\4S j5       rS\S\4S jrS\S\4S jrS\S\4S jr\S\S\SS 4S j5       r\SS\R(                  S\R(                  S\\R(                     SS 4S jj5       rSrU =r$ )r   (   zRepresent a hyperplane in n-dimensional space.

Args:
    n: The normal vector of the hyperplane.
    d: The scalar distance from the origin.
ndr   Nc                 z   > [         TU ]  5         [        U[        5        [        U[        5        Xl        X l        g N)super__init__r   r   r   _n_d)selfr   r    	__class__s      r   r$   Hyperplane.__init__0   s.    !W%!V$ r   c                 :    SU R                    SU R                   3$ )NzNormal: z	
Offset: )normaloffsetr'   s    r   __str__Hyperplane.__str__:   s    $++j>>r   c                     [        U 5      $ r"   )strr-   s    r   __repr__Hyperplane.__repr__=   s    4yr   c                     U R                   $ r"   )r%   r-   s    r   r+   Hyperplane.normal@       wwr   c                     U R                   $ r"   )r&   r-   s    r   r,   Hyperplane.offsetD   r6   r   pc                 R    [        U R                  U5      R                  5       5      $ r"   )r   signed_distanceabsr'   r9   s     r   abs_distanceHyperplane.abs_distanceH   s!    d**1-11344r   c                     [        [        U[        [        R                  -  5      5        U R
                  R                  U5      U R                  -   $ r"   )r   
isinstancer   torchTensorr+   dotr,   r=   s     r   r;   Hyperplane.signed_distanceM   s6    Z7U\\#9:;{{q!DKK//r   c                     U R                  U5      n[        UR                  5      [        U R                  5      :w  a  US   nXR                  U R                  -  -
  $ )N).N)r;   lenshaper+   data)r'   r9   dists      r   
projectionHyperplane.projectionS   sJ    ##A&tzz?c$++..	?D99t{{***r   ec                 T    UnUR                  U5      * n[        U[        U5      5      $ r"   )rD   r   r   )r'   r   rM   r+   r,   s        r   from_vectorHyperplane.from_vector]   s'    **Q-&&.11r   p0p1p2c                 X   Ucq  [        USS/5        [        UR                  UR                  :H  5        [        X!-
  5      n[	        X5      * n[        [        U[        5      [        U[        5      5      $ [        USS/5        [        UR                  UR                  :H  5        [        UR                  UR                  :H  5        X1-
  X!-
  pv[        R                  R                  XgSS9nUR                  S5      n	S[        R                  S[        R                  SS	4S
 jn
XR                  S5      UR                  S5      -  S-  :*  n[        R                  " X" Xg5      R                  XS-   -  5      n[	        X5      * n[        [        U[        5      [        U[        5      5      $ )N*23r   )r   v0v1r   r   c                     [         R                  " [        U 5      [        U5      4S5      n[        U5      u    p4[	        USS S 2S4   [
        5      $ )N.r   )rB   stackr   r
   r	   r   )rX   rY   m_Vs        r   compute_normal_svd.Hyperplane.through.<locals>.compute_normal_svdw   sD    WR['"+6;A%a(GAq32:00r   ư>)r   r   rH   r   r   r   r	   r   r   rB   linalgcrossnormrC   whererI   )clsrQ   rR   rS   normal2doffset2drX   rY   r+   re   r`   normal_maskr,   s                r   throughHyperplane.throughc   s^    :rC:.RXX-.!"'*H+B99HeHg6h8OPP2Sz*RXX)*RXX)*'RWB##B#3{{2	15<< 	1U\\ 	1i 	1 ggbkBGGBK7$>>[*<R*D*I*I6\`U`Kab%b11%0%2GHHr   )r&   r%   r"   )__name__
__module____qualname____firstlineno____doc__r   r   r$   r1   r.   r2   propertyr+   r,   r>   r;   rK   classmethodrO   rB   rC   r   rk   __static_attributes____classcell__)r(   s   @r   r   r   (   s   ' f  ? ?#       5g 5& 5
0 0V 0+G + + 2W 2 2\ 2 2
 I I5<< IXell=S I_k I Ir   pointsc                     U R                   S   S:w  a  [        S5      eU R                  SS5      nX-
  n[        U5      u    p4USSS2S4   nUSSSS24   n[        R                  [        U5      [        U5      5      $ )	zFit a plane from a set of points using SVD.

Args:
    points: tensor containing a batch of sets of n-dimensional points. The  expected
        shape of the tensor is :math:`(N, D)`.

Return:
    The computed hyperplane object.

r      zvector must be (*, 3)r[   T.Nr   )rH   	TypeErrormeanr
   r   rO   r   )rv   rz   points_centeredr^   r_   	directionorigins          r   r   r      s     ||B1/00;;r4 DmO o.GAq #q"*I#q!)_F!!')"4gfoFFr   )rb   )typingr   rB   r   kornia.core.checkr   r   r   kornia.core.tensor_wrapperr   r	   kornia.core.utilsr
   kornia.geometry.linalgr   kornia.geometry.vectorr   r   __all__rC   floatr   Moduler   r    r   r   <module>r      sy   *    Q Q 5 - 6 2
%%,, U ell 
YI YI|Gg G* Gr   