
    'jN	                    R    d dl mZ d dlmZmZ d dlmZmZmZ ddgZ	dd
Z
	 dddZdS )    )annotations)IterableSequence)Vec3Bezier4PUVeccubic_bezier_interpolation#tangents_cubic_bezier_interpolationpointsIterable[UVec]returnIterable[Bezier4P[Vec3]]c              #  ,  K   ddl m} t          j        |           t	                    dk     rdS t	                    dz
  }dg|z  }dg|z  }dg|z  }d|d<   d	||dz
  <   d||dz
  <   d         dd         z  z   g}|                    fd
t          d|dz
            D                        |                    d|dz
           z  |         z               ||||g|          }t          j        |	                                          }d t          dd         |dd                   D             }	|	                    ||dz
           |         z   dz             t          ||	dd                   D ]}
t          |
          V  dS )u   Returns an interpolation curve for given data `points` as multiple cubic
    Bézier-curves. Returns n-1 cubic Bézier-curves for n given data points,
    curve i goes from point[i] to point[i+1].

    Args:
        points: data points

    r   )tridiagonal_matrix_solver   N   g      @g      ?       @g      @c              3  L   K   | ]}d d |         z  |dz            z   z  V  dS )r   r   N ).0ipntss     Y/DATA/AppData/hermes/venv/lib/python3.11/site-packages/ezdxf/math/bezier_interpolation.py	<genexpr>z-cubic_bezier_interpolation.<locals>.<genexpr>*   sN        01sT!W}tAE{*+         g       @c                $    g | ]\  }}|d z  |z
  S )r   r   )r   pcps      r   
<listcomp>z.cubic_bezier_interpolation.<locals>.<listcomp>2   s1       BC"  r   )ezdxf.math.linalgr   r   tuplelenextendrangeappendlistrowszipr   )r   r   numbacpoints_vectorsolutioncontrol_points_1control_points_2	defpointsr   s              @r   r	   r	      s      <;;;;; :fD
4yy1}}
d))a-C 
A	A	AAaDAcAgJAcAgJ !WsT!W},-M    5:1cAg5F5F      tC!G},tCy8999 )(!QMBBHy11 "%d122h0@0D"E"E   -cAg6cBcIJJJ 0$qrr(  " "	 y!!!!!!" "r   T
fit_pointsSequence[Vec3]
list[Vec3]c                   t          |           dk     rt          d          t          t          |                     }d |D             }|d         j        }|                    |d         |d         z
             |rd |D             }|S )Nr   zAt least 3 points requiredc                D    g | ]}|j         d          |j         d         z
  S )r   r   )control_points)r   curves     r   r   z7tangents_cubic_bezier_interpolation.<locals>.<listcomp>D   s:       @E	a	 5#7#:	:  r      c                6    g | ]}|                                 S r   )	normalize)r   ts     r   r   z7tangents_cubic_bezier_interpolation.<locals>.<listcomp>K   s     444aAKKMM444r   )r"   
ValueErrorr&   r	   r7   r%   )r2   r<   curvestangentslast_pointss        r   r
   r
   =   s     :5666,Z8899F IO  H *+KOOKN[^3444 5448444Or   N)r   r   r   r   )T)r2   r3   r   r4   )
__future__r   typingr   r   
ezdxf.mathr   r   r   __all__r	   r
   r   r   r   <module>rF      s    # " " " " " % % % % % % % % + + + + + + + + + + ()N
O." ." ." ."d +/      r   