Jump to content

Recommended Posts

Posted

Only a few mathematical functions are covered in the LISP programming language, so I thought I'd treat us to a few more :)

 

[i][color=#990099];; Inverse Sine (ArcSin)[/color][/i]
[i][color=#990099];; Args: -1 <= x <= 1[/color][/i]

[b][color=RED]([/color][/b][b][color=BLUE]defun[/color][/b] asin [b][color=RED]([/color][/b]x[b][color=RED])[/color][/b]
 [b][color=RED]([/color][/b][b][color=BLUE]cond[/color][/b] [b][color=RED]([/color][/b][b][color=RED]([/color][/b][b][color=BLUE]<[/color][/b] [b][color=#009999]1.[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]abs[/color][/b] x[b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=BLUE]nil[/color][/b][b][color=RED])[/color][/b]
       [b][color=RED]([/color][/b][b][color=RED]([/color][/b][b][color=BLUE]equal[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]abs[/color][/b] x[b][color=RED])[/color][/b] [b][color=#009999]1.[/color][/b] [color=#009999][b]1e-9[/b][/color][b][color=RED])[/color][/b]
        [b][color=RED]([/color][/b][b][color=BLUE]*[/color][/b] x [b][color=RED]([/color][/b][b][color=BLUE]/[/color][/b] [b][color=BLUE]pi[/color][/b] [b][color=#009999]2.[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b]
       [b][color=RED]([/color][/b][b][color=BLUE]t[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]atan[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]/[/color][/b] x [b][color=RED]([/color][/b][b][color=BLUE]sqrt[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]-[/color][/b] [b][color=#009900]1[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]expt[/color][/b] x [b][color=#009900]2[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b]

[i][color=#990099];; Inverse Cosine (ArcCos)[/color][/i]
[i][color=#990099];; Args: -1 <= x <= 1[/color][/i]

[b][color=RED]([/color][/b][b][color=BLUE]defun[/color][/b] acos [b][color=RED]([/color][/b]x[b][color=RED])[/color][/b]
 [b][color=RED]([/color][/b][b][color=BLUE]cond[/color][/b] [b][color=RED]([/color][/b][b][color=RED]([/color][/b][b][color=BLUE]<[/color][/b] [b][color=#009999]1.[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]abs[/color][/b] x[b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=BLUE]nil[/color][/b][b][color=RED])[/color][/b]
       [b][color=RED]([/color][/b][b][color=RED]([/color][/b][b][color=BLUE]zerop[/color][/b] x[b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]/[/color][/b] [b][color=BLUE]pi[/color][/b] [b][color=#009999]2.[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b]
       [b][color=RED]([/color][/b][b][color=BLUE]t[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]atan[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]/[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]sqrt[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]-[/color][/b] [b][color=#009900]1[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]expt[/color][/b] x [b][color=#009900]2[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] x[b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b]

[i][color=#990099];; Hyperbolic Sine (Sinh)[/color][/i]
[i][color=#990099];; Args: Real x[/color][/i]

[b][color=RED]([/color][/b][b][color=BLUE]defun[/color][/b] sinh [b][color=RED]([/color][/b]x[b][color=RED])[/color][/b]
 [b][color=RED]([/color][/b][b][color=BLUE]/[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]-[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]exp[/color][/b] x[b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]exp[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]*[/color][/b] [b][color=#009999]-1.[/color][/b] x[b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=#009999]2.[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b]

[i][color=#990099];; Hyperbolic Cosine (Cosh)[/color][/i]
[i][color=#990099];; Args: Real x[/color][/i]

[b][color=RED]([/color][/b][b][color=BLUE]defun[/color][/b] cosh [b][color=RED]([/color][/b]x[b][color=RED])[/color][/b]
 [b][color=RED]([/color][/b][b][color=BLUE]/[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]+[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]exp[/color][/b] x[b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]exp[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]*[/color][/b] [b][color=#009999]-1.[/color][/b] x[b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=#009999]2.[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b]

[i][color=#990099];; Hyperbolic Tangent (Tanh)[/color][/i]
[i][color=#990099];; Args: Real x[/color][/i]

[b][color=RED]([/color][/b][b][color=BLUE]defun[/color][/b] tanh [b][color=RED]([/color][/b]x[b][color=RED])[/color][/b]
 [b][color=RED]([/color][/b][b][color=BLUE]/[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]-[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]exp[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]*[/color][/b] [b][color=#009999]2.[/color][/b] x[b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=#009999]1.[/color][/b][b][color=RED])[/color][/b]
    [b][color=RED]([/color][/b][b][color=BLUE]+[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]exp[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]*[/color][/b] [b][color=#009999]2.[/color][/b] x[b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=#009999]1.[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b]

[i][color=#990099];; Inverse Hyperbolic Sine (ArcSinh)[/color][/i]
[i][color=#990099];; Args: Real x[/color][/i]

[b][color=RED]([/color][/b][b][color=BLUE]defun[/color][/b] asinh [b][color=RED]([/color][/b]x[b][color=RED])[/color][/b]
 [b][color=RED]([/color][/b][b][color=BLUE]log[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]+[/color][/b] x [b][color=RED]([/color][/b][b][color=BLUE]sqrt[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]+[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]expt[/color][/b] x [b][color=#009900]2[/color][/b][b][color=RED])[/color][/b] [b][color=#009900]1[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b]

[i][color=#990099];; Inverse Hyperbolic Cosine (ArcCosh)[/color][/i]
[i][color=#990099];; Args: x >= 1[/color][/i]

[b][color=RED]([/color][/b][b][color=BLUE]defun[/color][/b] acosh [b][color=RED]([/color][/b]x[b][color=RED])[/color][/b]
 [b][color=RED]([/color][/b][b][color=BLUE]cond[/color][/b] [b][color=RED]([/color][/b][b][color=RED]([/color][/b][b][color=BLUE]<[/color][/b] x [b][color=#009999]1.[/color][/b][b][color=RED])[/color][/b] [b][color=BLUE]nil[/color][/b][b][color=RED])[/color][/b]
       [b][color=RED]([/color][/b][b][color=BLUE]t[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]log[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]+[/color][/b] x [b][color=RED]([/color][/b][b][color=BLUE]sqrt[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]-[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]expt[/color][/b] x [b][color=#009900]2[/color][/b][b][color=RED])[/color][/b] [b][color=#009900]1[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b]

[i][color=#990099];; Inverse Hyperbolic Tangent (ArcTanh)[/color][/i]
[i][color=#990099];; Args: -1 < x < 1[/color][/i]

[b][color=RED]([/color][/b][b][color=BLUE]defun[/color][/b] atanh [b][color=RED]([/color][/b]x[b][color=RED])[/color][/b]
 [b][color=RED]([/color][/b][b][color=BLUE]cond[/color][/b] [b][color=RED]([/color][/b][b][color=RED]([/color][/b][b][color=BLUE]<=[/color][/b] [b][color=#009999]1.[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]abs[/color][/b] x[b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=BLUE]nil[/color][/b][b][color=RED])[/color][/b]
       [b][color=RED]([/color][/b][b][color=BLUE]t[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]/[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]log[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]/[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]+[/color][/b] [b][color=#009999]1.[/color][/b] x[b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]-[/color][/b] [b][color=#009999]1.[/color][/b] x[b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=#009999]2.[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b]

[i][color=#990099];; Fibonnacci Number Generator[/color][/i]
[i][color=#990099];; Args: Natural x[/color][/i]

[b][color=RED]([/color][/b][b][color=BLUE]defun[/color][/b] fib [b][color=RED]([/color][/b]x[b][color=RED])[/color][/b]
 [b][color=RED]([/color][/b][b][color=BLUE]cond[/color][/b] [b][color=RED]([/color][/b][b][color=RED]([/color][/b][b][color=BLUE]or[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]minusp[/color][/b] x[b][color=RED])[/color][/b]
            [b][color=RED]([/color][/b][b][color=BLUE]not[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]eq[/color][/b] [b][color=DARKRED]'[/color][/b]INT [b][color=RED]([/color][/b][b][color=BLUE]type[/color][/b] x[b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b]
        [b][color=BLUE]nil[/color][/b][b][color=RED])[/color][/b]
       [b][color=RED]([/color][color=Blue]t[/color][/b]
        [b][color=RED]([/color][/b][b][color=BLUE]*[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]/[/color][/b] [b][color=#009999]1.[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]sqrt[/color][/b] [b][color=#009999]5.[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b]
           [b][color=RED]([/color][/b][b][color=BLUE]-[/color][/b]
             [b][color=RED]([/color][/b][b][color=BLUE]expt[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]/[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]+[/color][/b] [b][color=#009999]1.[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]sqrt[/color][/b] [b][color=#009999]5.[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=#009999]2.[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]1+[/color][/b] x[b][color=RED])[/color][/b][b][color=RED])[/color][/b]
             [b][color=RED]([/color][/b][b][color=BLUE]expt[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]/[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]-[/color][/b] [b][color=#009999]1.[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]sqrt[/color][/b] [b][color=#009999]5.[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=#009999]2.[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]1+[/color][/b] x[b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b]
           
       

Posted

Thanks for sharing. Is there any practical application for the Fibonacci number?

Posted
Thanks for sharing. Is there any practical application for the Fibonacci number?

 

 

Hi fuccaro, the setting out or drawing of Curtail steps and handrail volutes are based on the Fibbonacci sequence. As an example:

ascending_volute_close2.jpg

Posted

I haven't touched this in many months, but it was a lot of fun. It'll draw functions to the screen, as points or a polyline, with whatever you choose in terms of limits and precision. It does everything from a sin wave to a hyperbolic paraboloid to damped harmonic motion, and I'm sure you could tweak it to do whatever you'd like. It's more fun than useful, so I hope you enjoy it ^.^

 

(defun c:fnplot(/ list1)

 ; Plot function
 (setq echo (getvar "cmdecho"))
 (setvar "cmdecho" 0)
 
 (setq lowerBnd 0.0000000
   upperBnd 10.0000000
   precisionX 2000
   precisionY precisionX
   results "hi"
   )
;  (setq lowerBnd (getreal "\nEnter lower bound: ")
;    upperBnd (getreal "\nEnter upper bound: ")
;    precision (getreal "\nEnter precision: ")
;    )
 (setq incrementX (/ (- upperBnd lowerBnd) precisionX))
 (setq incrementY (/ (- upperBnd lowerBnd) precisionY))

 (setq dum1 lowerBnd)
 (repeat precisionX ; Begin repeat loop
   (setq x dum1)
   (setq dum2 lowerBnd)
   (repeat precisionY ; Begin nested repeat loop
     (setq y dum2)

     ;(sphere x y)
     (sinusoid x)
     ;(logarithm x)
     ;(dampedvibration x)
     ;(polynom x)
     
     (wheel)
     (setq dum2 (+ dum2 incrementY))
     ); /nested repeat
   (setq dum1 (+ dum1 incrementX))
   ); /repeat

 (if list1
   (scribblescribble)
   )
 
 (setvar "cmdecho" echo)
 (princ)
 ); /program

; -- Cheap error function
(defun goodtimes()
 (princ "Strong Bad, help! I swallowed a bug! The good times are over!")(princ)
 )

; -- Wheel function for spinnyness --
(defun wheel ()
(if (not wh)(setq wh "-"))
(cond
((= wh "|") (setq wh "/"))
((= wh "/") (setq wh "-"))
((= wh "-") (setq wh "\\"))
((= wh "\\") (setq wh "|"))
)
(prompt (strcat "\10" wh))
(princ)
)

; -- Draw polyline using list1
(defun scribblescribble()
 (setq vl (list
    (cons 0 "LWPOLYLINE")
    (cons 8 "0")
    (cons 100 "AcDbEntity")
    (cons 100 "AcDbPolyline")
    (cons 90 (length list1))
    (cons 70 0)
    (cons 43 0.0)
    )
    )
 (foreach le list1
   (setq vl (append vl
   (list (cons 10 le))
            )
     )
   (wheel)
   )
 (entmake vl)

 (princ results)(princ)
 )

; -- Begin drawing functions --
; Point Spheroids
(defun sphere(x y / list1)
 (setq conA 1)
 (setq conB 1)
 (setq conC 1)

 (setq grpA (/ (expt x 2) (expt conA 2)))
 (setq grpB (/ (expt y 2) (expt conB 2)))
 (setq grpC (* (expt conC 2) (+ grpA grpB)))

 ; Sphere
 ;(setq z (sqrt (* -1 grpC)))

 ; Hyperboloid of 1 sheet
 ;(setq z (sqrt (- grpC (expt conC 2))))

 ; Hyperboloid of 2 sheets
 ;(setq z (sqrt (+ grpC (expt conC 2))))

 ; Degenerate Hyperboloid
 ;(setq z (sqrt grpC))
 
 (if (> (+ grpC (expt conC 2)) 0)
 (progn
 (setq z (sqrt (+ grpC (expt conC 2))))
 (command "point" (list x y z))
 (command "point" (list x y (* -1 z)))
 )
 )
 );/sphere

; Line Sinusoid
(defun sinusoid(x /)
 (setq precisionY 1)
 
 (setq y_sinusoid (* 2 (sin x)))
 (setq list1 (append list1 (list (list x y_sinusoid 0))))
 )

; Line Polynomial
(defun polynom(x /)
 (setq precisionY 1)
 
 (setq consList (list 7 5 4 6 4 2 8 6 5 5 2))
 
 (setq y_polynom 0)
 (setq dumVar 0)
 (repeat (- (length consList) 1)
   (setq y_polynom (+ y_polynom (* (nth dumVar consList) (expt x (- (- (length consList) 1) dumVar)))))
   (setq dumVar (+ 1 dumVar))
   )
 (setq y_polynom (+ y_polynom (nth (- (length consList) 1) consList)))
 
 (setq list1 (append list1 (list (list x y_polynom 0))))
 )

; Line Logarithm
(defun logarithm(x /)
 (setq precisionY 1)
 
 (if (> x 0)
   (progn
     (setq y_log (* 1 (log x)))
     (setq list1 (append list1 (list (list x y_log 0))))
     )
   )
 )

; Line Damped Vibration
(defun dampedvibration(x /)
 (setq precisionY 1)
 (setq time x)

 ; Set up initial conditions for forced, underdamped response (0 < zeta < 1)
 (setq mass 1)                                ; m
 (setq damping_coeff 0)                        ; c        If 0, undamped
 (setq spring_const 2)                            ; k
 
 (setq initDis 1)                            ; x_o
 (setq initVel 0)                            ; v_o
 (setq initFor 10)                            ; F_o        If 0, free response
 
 (setq dampRat (/ damping_coeff (* 2 (sqrt (* spring_const mass)))))    ; zeta

 ; * Zeta must be greater than zero but less than one to proceed * ;
 (if (and (>= dampRat 0) (< dampRat 1))
   (progn
     ; Determine minor variables from initial conditions
     (setq modinitFor (/ initFor mass))                    ; f_o
 
     (setq drivFreq 1.1)                                ; omega
 
     (setq natFreq (sqrt (/ spring_const mass)))                ; omega_n
     (setq dampednatFreq (sqrt (- 1 (* natFreq dampRat dampRat))))        ; omega_d

     ; Determine major variables from minor variables

     (setq omn2_om (- (expt natFreq 2) (expt drivFreq 2)))
     (setq 2zomnom (* 2 dampRat natFreq drivFreq))
     (setq coefX (/ modinitFor (sqrt (+ (expt omn2_om 2) (expt 2zomnom 2)))))
     (setq theta (atan (/ 2zomnom omn2_om)))
     (setq XcosTheta (* coefX (cos theta)))
     (setq phiNum (* dampednatFreq (- initDis XcosTheta)))
     (setq phiDen (+ initVel (* natFreq dampRat (- initDis XcosTheta)) (* -1 drivFreq coefX (sin theta))))
     (if (and (= damping_coeff 0) (= initVel 0))    ; Test if undamped
       (setq phi 0)                    ; If undamped, set phi to zero
   (setq phi (atan (/ phiNum phiDen)))        ; Otherwise
      )
     (setq coefA (/ (- initDis XcosTheta) (sin phi)))
     (setq expo (expt 2.71828183 (* -1 dampRat dampednatFreq time)))

     ; Use major and minor variables to assemble general response function x(t)
     (setq dampingTerm (* coefA expo (sin (+ (* dampednatFreq time) phi))))
     (setq forcingTerm (* coefX (cos (- (* drivFreq time) theta))))

     ; Final response
     (setq y_dampedvibe (+ dampingTerm forcingTerm))
 
     (setq list1 (append list1 (list (list x y_dampedvibe 0))))
     )
   (progn
     )
   )
 )

Posted
Thanks for sharing. Is there any practical application for the Fibonacci number?

 

Well, tbh I added it just for fun :)

 

But as Rob points out, there may be a use :)

Posted

Ok, ok! I give up: Fibonacci is usefull :)

Posted

OK, just a few more - I obtained Matrix Transpose from theSwamp - some great coding.

 

[i][color=#990099];; Vector Dot Product[/color][/i]
[i][color=#990099];; Args: a,b Vectors[/color][/i]

[b][color=RED]([/color][/b][b][color=BLUE]defun[/color][/b] dot [b][color=RED]([/color][/b]a b[b][color=RED])[/color][/b]
 [b][color=RED]([/color][/b][b][color=BLUE]if[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]eq[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]length[/color][/b] a[b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]length[/color][/b] b[b][color=RED])[/color][/b][b][color=RED])[/color][/b]
   [b][color=RED]([/color][/b][b][color=BLUE]apply[/color][/b] [b][color=DARKRED]'[/color][/b][b][color=BLUE]+[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]mapcar[/color][/b] [b][color=DARKRED]'[/color][/b][b][color=BLUE]*[/color][/b] a b[b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b]

[i][color=#990099];; Vector Cross Product[/color][/i]
[i][color=#990099];; Args: a,b Vectors[/color][/i]

[b][color=RED]([/color][/b][b][color=BLUE]defun[/color][/b] cross [b][color=RED]([/color][/b]a b[b][color=RED])[/color][/b]
 [b][color=RED]([/color][/b][b][color=BLUE]cond[/color][/b] [b][color=RED]([/color][/b][b][color=RED]([/color][/b][b][color=BLUE]or[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]<[/color][/b] [b][color=#009900]3[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]length[/color][/b] a[b][color=RED])[/color][/b][b][color=RED])[/color][/b]
            [b][color=RED]([/color][/b][b][color=BLUE]/=[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]length[/color][/b] a[b][color=RED])[/color][/b]
                [b][color=RED]([/color][/b][b][color=BLUE]length[/color][/b] b[b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=BLUE]nil[/color][/b][b][color=RED])[/color][/b]
       [b][color=RED]([/color][/b][b][color=BLUE]t[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]list[/color][/b]
              [b][color=RED]([/color][/b][b][color=BLUE]-[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]*[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]cadr[/color][/b] a[b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]caddr[/color][/b] b[b][color=RED])[/color][/b][b][color=RED])[/color][/b]
                 [b][color=RED]([/color][/b][b][color=BLUE]*[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]cadr[/color][/b] b[b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]caddr[/color][/b] a[b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b]
              [b][color=RED]([/color][/b][b][color=BLUE]-[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]*[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]car[/color][/b] b[b][color=RED])[/color][/b]  [b][color=RED]([/color][/b][b][color=BLUE]caddr[/color][/b] a[b][color=RED])[/color][/b][b][color=RED])[/color][/b]
                 [b][color=RED]([/color][/b][b][color=BLUE]*[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]car[/color][/b] a[b][color=RED])[/color][/b]  [b][color=RED]([/color][/b][b][color=BLUE]caddr[/color][/b] b[b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b]
              [b][color=RED]([/color][/b][b][color=BLUE]-[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]*[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]car[/color][/b] a[b][color=RED])[/color][/b]  [b][color=RED]([/color][/b][b][color=BLUE]cadr[/color][/b] b[b][color=RED])[/color][/b][b][color=RED])[/color][/b]
                 [b][color=RED]([/color][/b][b][color=BLUE]*[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]car[/color][/b] b[b][color=RED])[/color][/b]  [b][color=RED]([/color][/b][b][color=BLUE]cadr[/color][/b] a[b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b]

[i][color=#990099];; Vector Norm[/color][/i]
[i][color=#990099];; Args: a Vector[/color][/i]

[b][color=RED]([/color][/b][b][color=BLUE]defun[/color][/b] norm [b][color=RED]([/color][/b]a[b][color=RED])[/color][/b]
 [b][color=RED]([/color][/b][b][color=BLUE]sqrt[/color][/b]
   [b][color=RED]([/color][/b][b][color=BLUE]apply[/color][/b] [b][color=DARKRED]'[/color][/b][b][color=BLUE]+[/color][/b]
     [b][color=RED]([/color][/b][b][color=BLUE]mapcar[/color][/b]
       [b][color=RED]([/color][/b][b][color=BLUE]function[/color][/b]
         [b][color=RED]([/color][/b][b][color=BLUE]lambda[/color][/b] [b][color=RED]([/color][/b]x[b][color=RED])[/color][/b]
           [b][color=RED]([/color][/b][b][color=BLUE]expt[/color][/b] x [b][color=#009900]2[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] a[b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b]

[i][color=#990099];; Matrix Transpose (by Doug Wilson)[/color][/i]
[i][color=#990099];; Args: m Matrix[/color][/i]

[b][color=RED]([/color][/b][b][color=BLUE]defun[/color][/b] trp [b][color=RED]([/color][/b]m[b][color=RED])[/color][/b]
 [b][color=RED]([/color][/b][b][color=BLUE]apply[/color][/b] [b][color=DARKRED]'[/color][/b][b][color=BLUE]mapcar[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]cons[/color][/b] [b][color=DARKRED]'[/color][/b][b][color=BLUE]list[/color][/b] m[b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b]

Posted

Here is Jon Fleming's contribution from back in the day


;;; The trigonometric functions not included with AutoLISP.
;;; Jon Fleming, May 20 1997.

;;; Note that some of the functions (arcsecant and arccosecant)
;;; use other functions defined in this file.

;;; Note that none of these functions check for valid
;;; arguments.  Passing valid arguments is the responsibility
;;; of the calling program.

;;; 9.7E307 was determined experimentally to be the largest
;;; number that can be generated in AutoLISP (in R14).

;;;--------------------------------------------------------

;;; tangent accepts any angle in radians, and returns the
;;; tangent in the range -9.7E307+epsilon to 9.7E307 inclusive

(defun tan (z / cosz)
  (if (zerop (setq cosz (cos z)))
    9.7e307
    (/ (sin z) cosz)
  ) ;_ end if
) ;_ end defun

;;; secant accepts any angle in radians, and returns the
;;; secant in the ranges -9.7E307+epsilon to -1.0 inclusive
;;; and 1.0 to 9.7E307 inclusive

(defun sec (z / cosz)
  (if (zerop (setq cosz (cos z)))
    9.7E307
    (/ 1.0 cosz)
  ) ;_ end if
) ;_ end defun

;;; cosecant accepts any angle in radians, and returns the
;;; cosecant in the ranges -9.7E307+epsilon to -1.0 inclusive
;;; and 1.0 to 9.7E307 inclusive

(defun csc (z / sinz)
    (if (zerop (setq sinz (sin z)))
        9.7E307
    (/ 1.0 sinz)
    )
)

;;; arcsine (inverse sine) accepts an argument in the range
;;; -1.0 to 1.0 inclusive, and returns an angle in radians in
;;; the range (-pi/2) to (pi/2) inclusive.

(defun asin (z /)
  (atan z (sqrt (- 1.0 (* z z))))
) ;_ end defun

;;; arccosine (inverse cosine) accepts an argument in the
;;; range -1.0 to 1.0 inclusive, and returns an angle in
;;; radians in the range pi to 0 inclusive

(defun acos (z /)
  (atan (sqrt (- 1.0 (* z z))) z)
) ;_ end defun

;;; arcsecant (inverse secant) accepts an argument in
;;; one of two ranges: minus infinity to -1 inclusive or
;;; 1 to infinity inclusive, and returns an angle in
;;; radians in the range pi to 0 inclusive (except
;;; EXACTLY pi/2 will never be returned on a computer
;;; with finite numerical precision)

(defun asec (z /)
  (acos (/ 1.0 z))
) ;_ end defun

;;; arccosecant (inverse cosecant) accepts an argument
;;; in one of two ranges: minus infinity to -1 inclusive or
;;; 1 to infinity inclusive, and returns an angle in
;;; radians in the range -pi/2 to pi/2 inclusive (except
;;; EXACTLY 0.0 will never be returned on a computer
;;; with finite numerical precision)

(defun acsc (z /)
  (asin (/ 1.0 z))
) ;_ end defun

;;; arccotangent (inverse cotangent) accepts an argument
;;; in the range minus infinity to plus infinity
;;; inclusive and returns an angle in radians in the
;;; range pi to 0 inclusive.

(defun acot (z /)
  (- (/ pi 2.0) (atan z))
) ;_ end defun

(prin1)


-David

Posted

Nice one David - this thread would be a great reference (possible sticky?) :unsure:

  • 5 months later...
Posted

Hi Rob

Saw your reply to the Fibonacci function where you attached a picture . Would you have any idea how to draw that handrail volutes in cad 3D . I have tried helyx extrusion and nothing works ??

Posted
OK, just a few more - I obtained Matrix Transpose from theSwamp - some great coding.

 

[i][color=#990099];; Vector Dot Product[/color][/i]
[i][color=#990099];; Args: a,b Vectors[/color][/i]

[b][color=RED]([/color][/b][b][color=BLUE]defun[/color][/b] dot [b][color=RED]([/color][/b]a b[b][color=RED])[/color][/b]
 [b][color=RED]([/color][/b][b][color=BLUE]if[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]eq[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]length[/color][/b] a[b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]length[/color][/b] b[b][color=RED])[/color][/b][b][color=RED])[/color][/b]
   [b][color=RED]([/color][/b][b][color=BLUE]apply[/color][/b] [b][color=DARKRED]'[/color][/b][b][color=BLUE]+[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]mapcar[/color][/b] [b][color=DARKRED]'[/color][/b][b][color=BLUE]*[/color][/b] a b[b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b]

[i][color=#990099];; Vector Cross Product[/color][/i]
[i][color=#990099];; Args: a,b Vectors[/color][/i]

[b][color=RED]([/color][/b][b][color=BLUE]defun[/color][/b] cross [b][color=RED]([/color][/b]a b[b][color=RED])[/color][/b]
 [b][color=RED]([/color][/b][b][color=BLUE]cond[/color][/b] [b][color=RED]([/color][/b][b][color=RED]([/color][/b][b][color=BLUE]or[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]<[/color][/b] [b][color=#009900]3[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]length[/color][/b] a[b][color=RED])[/color][/b][b][color=RED])[/color][/b]
            [b][color=RED]([/color][/b][b][color=BLUE]/=[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]length[/color][/b] a[b][color=RED])[/color][/b]
                [b][color=RED]([/color][/b][b][color=BLUE]length[/color][/b] b[b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=BLUE]nil[/color][/b][b][color=RED])[/color][/b]
       [b][color=RED]([/color][/b][b][color=BLUE]t[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]list[/color][/b]
              [b][color=RED]([/color][/b][b][color=BLUE]-[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]*[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]cadr[/color][/b] a[b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]caddr[/color][/b] b[b][color=RED])[/color][/b][b][color=RED])[/color][/b]
                 [b][color=RED]([/color][/b][b][color=BLUE]*[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]cadr[/color][/b] b[b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]caddr[/color][/b] a[b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b]
              [b][color=RED]([/color][/b][b][color=BLUE]-[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]*[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]car[/color][/b] b[b][color=RED])[/color][/b]  [b][color=RED]([/color][/b][b][color=BLUE]caddr[/color][/b] a[b][color=RED])[/color][/b][b][color=RED])[/color][/b]
                 [b][color=RED]([/color][/b][b][color=BLUE]*[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]car[/color][/b] a[b][color=RED])[/color][/b]  [b][color=RED]([/color][/b][b][color=BLUE]caddr[/color][/b] b[b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b]
              [b][color=RED]([/color][/b][b][color=BLUE]-[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]*[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]car[/color][/b] a[b][color=RED])[/color][/b]  [b][color=RED]([/color][/b][b][color=BLUE]cadr[/color][/b] b[b][color=RED])[/color][/b][b][color=RED])[/color][/b]
                 [b][color=RED]([/color][/b][b][color=BLUE]*[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]car[/color][/b] b[b][color=RED])[/color][/b]  [b][color=RED]([/color][/b][b][color=BLUE]cadr[/color][/b] a[b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b]

[i][color=#990099];; Vector Norm[/color][/i]
[i][color=#990099];; Args: a Vector[/color][/i]

[b][color=RED]([/color][/b][b][color=BLUE]defun[/color][/b] norm [b][color=RED]([/color][/b]a[b][color=RED])[/color][/b]
 [b][color=RED]([/color][/b][b][color=BLUE]sqrt[/color][/b]
   [b][color=RED]([/color][/b][b][color=BLUE]apply[/color][/b] [b][color=DARKRED]'[/color][/b][b][color=BLUE]+[/color][/b]
     [b][color=RED]([/color][/b][b][color=BLUE]mapcar[/color][/b]
       [b][color=RED]([/color][/b][b][color=BLUE]function[/color][/b]
         [b][color=RED]([/color][/b][b][color=BLUE]lambda[/color][/b] [b][color=RED]([/color][/b]x[b][color=RED])[/color][/b]
           [b][color=RED]([/color][/b][b][color=BLUE]expt[/color][/b] x [b][color=#009900]2[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] a[b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b]

[i][color=#990099];; Matrix Transpose (by Doug Wilson)[/color][/i]
[i][color=#990099];; Args: m Matrix[/color][/i]

[b][color=RED]([/color][/b][b][color=BLUE]defun[/color][/b] trp [b][color=RED]([/color][/b]m[b][color=RED])[/color][/b]
 [b][color=RED]([/color][/b][b][color=BLUE]apply[/color][/b] [b][color=DARKRED]'[/color][/b][b][color=BLUE]mapcar[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]cons[/color][/b] [b][color=DARKRED]'[/color][/b][b][color=BLUE]list[/color][/b] m[b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b]

special thanks Lee , Its very useful for me Because I'm not forced to go out of the AutoCAD environment ( to matlab ) and back again

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...