程序如下,FAF,IAF,MAPt三点位于一条直线,a i f m值分别为9.26 3.7 1.85 0.56。 c为331,运行之后出现提示:参数类型错误:二维/三维点:nil 。请各位高数指点!
(defun c:jj(/ o a b c d e f g h i j k l m p o1 o2 o3 o4 o5 o6 o7 o8 o9 o10 o11 o12 o13 o14)
(setq o (getpoint"确定FAF位置"))
(setq p (getpoint"确定IAF/IF位置"))
(setq g (getpoint"确定MAPt位置"))
(setq a (getreal"输入IAF/IF保护区半宽"))
(setq i (getreal"输入FAF保护区半宽"))
(setq f (getreal"输入MAPt保护区宽度"))
(setq c (getangle"输入航路的角度"))
(setq m (getreal"输入ATT数值"))
(setq j (/ pi 2))
(setq d (/ pi 6))
(setq e (/ pi 12))
(setq k (/ pi 3))
(setq b (/ (sin e) (cos e)))
(setq h (distance o7 p))
(setq l (distance o8 g))
(setq osm (getvar "osmode"))
(setvar "osmode" 0)
(setq o1 (polar o (+ c j) i))
(setq o2 (polar o (- c j) i))
(setq o3 (polar o1 (+ c j k) (* 2 (- a i))))
(setq o4 (polar o2 (- c j k) (* 2 (- a i))))
(setq o5 (polar o1 (- c d) (* 2 (- i f))))
(setq o6 (polar o2 (+ c d) (* 2 (- i f))))
(setq o7 (polar o (+ c pi) (* (sqrt 3)(- a i))))
(setq o8 (polar o c (* (sqrt 3) (- i f))))
(setq o9 (polar o7 (+ c j) (/ a 2)))
(setq o10 (polar o7 (- c j) (/ a 2)))
(setq o11 (polar o8 (+ c j) (/ f 2)))
(setq o12 (polar o8 (+ c j) (/ f 2)))
(setq o13 (polar p (+ c j ) (/ a 2)))
(setq o14 (polar p (- c j) (/ a 2)))
(setq o15 (polar p (+ c j) a))
(setq o16 (polar p (- c j) a))
(setq o17 (polar o11 c (- l m)))
(setq o18 (polar o12 c (- l m)))
(setq o19 (polar o5 c (- l m)))
(setq o20 (polar o6 c (- l m)))
(command "pline" o15 o3 o1 o5 o19 "")
(command "pline" o13 o9 o11 o17 "")
(command "pline" o14 o10 o12 o18 "")
(command "pline" o16 o4 o2 o6 o20 "")
(setvar "cecolor" "bylayer")
(setvar "osmmode" osm)
(princ))
(defun c:jj(/ o a b c d e f g h i j k l m p o1 o2 o3 o4 o5 o6 o7 o8 o9 o10 o11 o12 o13 o14)
(setvar "cmdecho" 0)
(setq o (getpoint "\n确定FAF位置:"))
(setq p (getpoint "\n确定IAF/IF位置:"))
(setq g (getpoint "\n确定MAPt位置:"))
(setq a (getreal "\n输入IAF/IF保护区半宽:"))
(setq i (getreal "\n输入FAF保护区半宽:"))
(setq f (getreal "\n输入MAPt保护区宽度:"))
(setq c (getangle "\n输入航路的角度:"))
(setq m (getreal "\n输入ATT数值:"))
(setq j (/ pi 2))
(setq d (/ pi 6))
(setq e (/ pi 12))
(setq k (/ pi 3))
(setq b (/ (sin e) (cos e)))
(setq osm (getvar "osmode"))
(setvar "osmode" 0)
(setq o1 (polar o (+ c j) i))
(setq o2 (polar o (- c j) i))
(setq o3 (polar o1 (+ c j k) (* 2 (- a i))))
(setq o4 (polar o2 (- c j k) (* 2 (- a i))))
(setq o5 (polar o1 (- c d) (* 2 (- i f))))
(setq o6 (polar o2 (+ c d) (* 2 (- i f))))
(setq o7 (polar o (+ c pi) (* (sqrt 3)(- a i))))
(setq o8 (polar o c (* (sqrt 3) (- i f))))
(setq h (distance o7 p))
(setq l (distance o8 g))
(setq o9 (polar o7 (+ c j) (/ a 2)))
(setq o10 (polar o7 (- c j) (/ a 2)))
(setq o11 (polar o8 (+ c j) (/ f 2)))
(setq o12 (polar o8 (+ c j) (/ f 2)))
(setq o13 (polar p (+ c j ) (/ a 2)))
(setq o14 (polar p (- c j) (/ a 2)))
(setq o15 (polar p (+ c j) a))
(setq o16 (polar p (- c j) a))
(setq o17 (polar o11 c (- l m)))
(setq o18 (polar o12 c (- l m)))
(setq o19 (polar o5 c (- l m)))
(setq o20 (polar o6 c (- l m)))
(command "pline" o15 o3 o1 o5 o19 "")
(command "pline" o13 o9 o11 o17 "")
(command "pline" o14 o10 o12 o18 "")
(command "pline" o16 o4 o2 o6 o20 "")
(setvar "cecolor" "bylayer")
(setvar "cmdecho" 1)
(setvar "osmode" osm)
(princ))
叮咚 发表于 2012-5-12 17:46
你也不看看,你的
(setq h (distance o7 p))
(setq l (distance o8 g))
谢谢你的帮助,下面是我改之后的程序,运行后出现,参数类型错误:numberp:nil,这又是什么原因?麻烦高手帮忙检查一下,谢谢!
(defun c:jj(/ o a b c d e f g h i j k l m p o1 o2 o3 o4 o5 o6 o7 o8 o9 o10 o11 o12 o13 o14 o15 o16 o17 o18 o19 o20)
(setvar "cmdecho" 0)
(setq o (getpoint"确定FAF位置"))
(setq p (getpoint"确定IAF/IF位置"))
(setq g (getpoint"确定MAPt位置"))
(setq a (getreal"输入IAF/IF保护区半宽"))
(setq i (getreal"输入FAF保护区半宽"))
(setq f (getreal"输入MAPt保护区宽度"))
(setq m (getreal"输入ATT数值"))
(setq j (/ pi 2))
(setq d (/ pi 6))
(setq e (/ pi 12))
(setq k (/ pi 3))
(setq osm (getvar "osmode"))
(setvar "osmode" 0)
(setq o1 (polar o (+ b j) i))
(setq o2 (polar o (- b j) i))
(setq o3 (polar o1 (+ b j k) (* 2 (- a i))))
(setq o4 (polar o2 (- b j k) (* 2 (- a i))))
(setq o5 (polar o1 (- b d) (* 2 (- i f))))
(setq o6 (polar o2 (+ b d) (* 2 (- i f))))
(setq o7 (polar o (+ b pi) (* (sqrt 3) (- a i))))
(setq o8 (polar o b (* (sqrt 3) (- i f))))
(setq l (distance o8 g))
(setq b (angle p o))
(setq h (angle o g))
(setq o9 (polar o7 (+ b j) (/ a 2)))
(setq o10 (polar o7 (- b j) (/ a 2)))
(setq o11 (polar o8 (+ b j) (/ f 2)))
(setq o12 (polar o8 (+ b j) (/ f 2)))
(setq o13 (polar p (+ b j ) (/ a 2)))
(setq o14 (polar p (- b j) (/ a 2)))
(setq o15 (polar p (+ b j) a))
(setq o16 (polar p (- b j) a))
(setq o17 (polar o11 b (- l m)))
(setq o18 (polar o12 b (- l m)))
(setq o19 (polar o5 b (- l m)))
(setq o20 (polar o6 b (- l m)))
(command "pline" o15 o3 o1 o5 o19 "")
(command "pline" o13 o9 o11 o17 "")
(command "pline" o14 o10 o12 o18 "")
(command "pline" o16 o4 o2 o6 o20 "")
(setvar "cecolor" "bylayer")
(setvar "cmdecho" 1)
(setvar "osmode" osm)
(princ))