⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lib.l

📁 A very small LISP implementation with several packages and demo programs.
💻 L
字号:
# 29nov04abu# (c) Software Lab. Alexander Burger# *Pilot *Scene *Model# *DT *Thr *Speed *Climb *Alt(load "simul/lib.l")(de *DT . 0.020)(de *Tower . 12.0)(de start ()   (task -20 0 (simulate))   (setq "Time" (time)) )(de stop ()   (task -20) )(de draw ()   (at (0 . 100)      (let N (time)         (rate> *Pilot (- N "Time"))         (setq "Time" N) ) )   (draw> *Scene) )(de simulate ()   (sim> *Scene)   (sim> *Model) )(de MUL Args   (let D 1.0      (make         (link '*/ (pop 'Args) (pop 'Args))         (while Args            (setq D (* D 1.0))            (link (pop 'Args)) )         (link D) ) ) )(de damp ("Var" Val)   (set "Var" (>> 1 (+ Val (val "Var")))) )(de doppler (F X Y VX VY)   (let N (ext:Dist X Y)      (if (=0 N)         F         (- F            (*/ F               (+ `(MUL X VX) `(MUL Y VY))               (* N 150) ) ) ) ) )(class +Model)# mass power rc lc limit tx tz pitch torq stab# body leftAileron rightAileron rudder elevator propeller blade disk# ele ail rud thr thrust vx vy vz fx fy fz dx dy dz(dm T ()   (load "rcsim/fokker.l")   (=: ele (=: ail (=: rud (=: thr (=: thrust 0)))))   (=: vx (=: vy (=: vz 0)))   (=: fx (=: fy (=: fz 0)))   (=: dx (=: dy (=: dz 0)))   (z3d:dx -100.0 (: body))   (z3d:dy -200.0 (: body))   (blade> This) )(dm dir> ()   (let B (val (: body))      (z3d:Spot         (+ (car B) (>> 3 (: vx)) (>> 2 (: vz)))         (+ (cadr B) (>> 3 (: vy)) (>> 2 (: vz)))         (+ (caddr B) (>> 3 (: vz)) (>> 2 (: vz)))         0 0 *Tower ) ) )(dm blade> ()   (set (: propeller) (val (: blade))) )(dm disk> ()   (set (: propeller) (val (: disk))) )(dm down> ()   (when (> (: ele) -100)      (dec (:: ele) 20)      (z3d:Arot +0.2 (: elevator)) ) )(dm up> ()   (when (> 100 (: ele))      (inc (:: ele) 20)      (z3d:Arot -0.2 (: elevator)) ) )(dm left> ()   (when (> (: ail) -100)      (dec (:: ail) 20)      (dec (:: rud) 20)      (z3d:Arot +0.2 (: leftAileron))      (z3d:Arot +0.2 (: rightAileron))      (z3d:Arot +0.2 (: rudder)) ) )(dm right> ()   (when (> 100 (: ail))      (inc (:: ail) 20)      (inc (:: rud) 20)      (z3d:Arot -0.2 (: leftAileron))      (z3d:Arot -0.2 (: rightAileron))      (z3d:Arot -0.2 (: rudder)) ) )(dm throt> (X)   (=: thr      (cond         ((not X) 0)         ((=T X) 100)         ((lt0 X) (max 10 (- (: thr) 25)))         ((=0 (: thr)) 10)         ((= 10 (: thr)) 25)         (T (min 100 (+ 25 (: thr)))) ) ) )(dm sim> ()   (cond      ((gt0 (: ele))         (dec (:: ele))         (z3d:Arot +0.01 (: elevator)) )      ((lt0 (: ele))         (inc (:: ele))         (z3d:Arot -0.01 (: elevator)) ) )   (cond      ((gt0 (: ail))         (dec (:: ail))         (dec (:: rud))         (z3d:Arot +0.01 (: leftAileron))         (z3d:Arot +0.01 (: rightAileron))         (z3d:Arot +0.01 (: rudder)) )      ((lt0 (: ail))         (inc (:: ail))         (inc (:: rud))         (z3d:Arot -0.01 (: leftAileron))         (z3d:Arot -0.01 (: rightAileron))         (z3d:Arot -0.01 (: rudder)) ) )   (cond      ((> (: thr) (: thrust))         (inc (:: thrust)) )      ((> (: thrust) (: thr))         (dec (:: thrust)) ) )   (if (> 20 (: thrust))      (blade> This)      (disk> This) )   (unless (=0 (: thrust))      (z3d:Xrot 0.2 (: propeller)) )   (use (Touch VX VY VZ Body Taxi Stick A FX FY FZ DX DY DZ)      (z3d:Rotate (: tx) 0 (: tz) (: body) NIL NIL 'Touch)      (z3d:Rotate (: vx) (: vy) (: vz) (: body) 'VX 'VY 'VZ T)      (setq         Body (val (: body))         Taxi (> 0.1 (+ (caddr Body) Touch))         Stick (>= 1.0 (+ VX VY))         FX (+ (*/ (: thrust) (: power) 100) `(MUL (: rc) VX (abs VX)))         FZ (+            (cond               ((> 0.1 VX) 0)               ((> (abs (setq A (*/ 1.0 VZ VX))) (: lim2))                  0 )               ((>= (: lim1) A)                  `(MUL VX VX (: lc) A) )               (T `(MUL VX VX (: lc) (- (: lim2) A))) )            `(MUL 8.0 (: rc) VZ (abs VZ)) ) )      (ifn Taxi         (setq FY `(MUL 4.0 (: rc) VY (abs VY)))         (let F (>> 2 (: mass))            (cond               ((> 0.1 (abs VX))                  (and (>= F FX) (zero FX)) )               ((gt0 VX)                  (dec 'FX F) )               (T (inc 'FX F)) )            (setq FY (if (lt0 VY) (* 12 F) (* -12 F))) )         (z3d:Yrot            (>> 3 (- (: pitch) (get Body 6)))  # rot.a.z            (: body) ) )      (unless Stick         (z3d:Yrot            (+               (*/ VX (+ (: ele) (: trim)) 80000)               `(MUL VZ (: stab 2)) )            (: body) )         (if Taxi            (prog               (z3d:Zrot (*/ VX (: rud) 80000) (: body))               (z3d:Xrot (get Body 9) (: body)) )  # rot.b.z            (z3d:Xrot  # roll               (+                  (- (*/ VX (: ail) 80000) (/ VY 400))                  (*/ (: thrust) (: torq) (: mass))                  `(MUL (get Body 9) (: stab 1)) )  # rot.b.z               (: body) )            (z3d:Zrot               (+                  (*/ VX (: rud) 80000)                  `(MUL VY (: stab 3)) )               (: body) ) ) )      # World system      (z3d:Rotate FX FY FZ (: body) 'FX 'FY 'FZ)      (dec 'FZ `(MUL (: mass) 9.81))      # Accelerate      (setq         A (*/ 1.0 *DT (: mass))         DX `(MUL A (damp (:: fx) FX))         DY `(MUL A (damp (:: fy) FY))         DZ `(MUL A (damp (:: fz) FZ)) )      (if (and Stick (> 0.001 (+ `(MUL DX DX) `(MUL DY DY))))         (=: vx (=: vy (=: dx (=: dy 0))))         (inc (:: vx) (damp (:: dx) DX))         (inc (:: vy) (damp (:: dy) DY)) )      (inc (:: vz) (damp (:: dz) DZ))      (when (and Taxi (lt0 (: vz)))         (when (> -6.0 (: vz))            (=: thr (=: thrust 0))            (=: vx (=: vy 0))            (blade> This) )         (set (cddr Body) (- Touch))         (=: vz 0) )      # Translate      (inc Body `(MUL (: vx) *DT))      (inc (cdr Body) `(MUL (: vy) *DT))      (inc (cddr Body) `(MUL (: vz) *DT))      # Sound/Display      (tone> *Scene         (max 0            (- 100               (/ (ext:Dist (car Body) (cadr Body)) 40.0) ) )         (cond            ((=0 (: thrust)) 0)            ((> 22 (: thrust)) 11)            (T               (doppler                  (>> 1 (+ (: thrust) (/ VX 0.5)))                  (car Body)                  (cadr Body)                  (: vx)                  (: vy) ) ) ) )      (unless (= *Thr (: thr))         (thr> *Pilot (setq *Thr (: thr))) )      (unless (= *Speed (setq A (*/ VX 3.6 `(* 1.0 1.0))))         (speed> *Pilot (setq *Speed A)) )      (unless (= *Climb (setq A (/ (: vz) 1.0)))         (climb> *Pilot (setq *Climb A)) )      (unless (= *Alt (setq A (/ (caddr Body) 1.0)))         (alt> *Pilot (setq *Alt A)) ) ) )

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -