Hi all master .
I want use Fourier transform method to quick rebuild any closed curves , but I don't know how to Use Fast Fourier transform method .
Thank you for your enthusiastic guide .
here's I wrote .
;; 傅里叶转换因子 Fourier transform factor .
(defun fourier
(pl
/ xl yl N i j k kl
) i 0)
'+
(list (+ (* x
(cos (/ (* 2. pi i j
) N
))) (* y
(sin (/ (* 2. pi i j
) N
)))) (- (* y
(cos (/ (* 2. pi i j
) N
))) (* x
(sin (/ (* 2. pi i j
) N
))) ))))
xl
yl)))
k (pt* k (1/ N)))
)
Test command
(defun c:test
(/ pl kl N i j p
) (setq pl
(LM:Entity
->PointList
(car (entsel "\nSelect a closed curve :")))) i 0
pl nil)
;; rebuild curve
'+
(ixi k
(- (sin (/ (* 2. pi i j
) N
))))))) kl))))
(cons 100 "AcDbPolyline") )
Used Function
;;-------------------------------------------------------------------------
;; 复数相乘 Plural Multiplication
)
;;欧拉公式 Euler's formula : e^±ix=cosx±isinx e^iπ+1=0
;------------------------------------------------------------;;
;; Author: Lee Mac, Copyright ?2011 - www.lee-mac.com ;;
;;------------------------------------------------------------;;
;; Arguments: ;;
;; ent - Entity for which to return Point List. ;;
;;------------------------------------------------------------;;
;; Returns: List of Points describing/approximating entity ;;
;;------------------------------------------------------------;;
(defun LM:Entity
->PointList
( ent
/ der di1 di2 di3 elst fun inc lst par rad
) )
)
inc
(/ di2
(1+ (fix (* 35.0 (/ di2
(cdr (assoc 40 elst
)) (+ pi pi
)))))) )
di1 (+ di1 inc)
)
)
lst
)
)
)
(setq inc
(/ (- di2 di1
) (1+ (fix (* 35.0 (/ (- di2 di1
) rad
(+ pi pi
))))))) di1 (+ di1 inc)
)
)
)
)
)
)
)
lst
)
)
)
di1
(+ di1
(/ di3
(1+ (fix (/ 35.0 (/ di3 der
(+ pi pi
))))))) )
)
lst
)
)
inc (/ di2 25.0)
)
di1
(+ di1
(if (equal 0.0 der 1e
-10
) inc
(min inc
(/ 1.0 der
(* 10. inc
))))) )
)
lst
)
)
)
)