流_星 发表于 2014-8-6 18:29:42

圆弧取点问题

本帖最后由 流_星 于 2014-8-6 18:30 编辑

(while
         (= nil
          (setq pnt1 (getpoint "\nPick point to place angle: "))
         )
          (alert "\nPlease pick a point")
      )
(setq a 40 b 40 c 5)
      (setq r c)
   (setq d (/ c 2))
   (setq e (/ a 2))
   (setq f (/ b 2))
   (setq r1 (sqrt (/ (expt r 2) 2)))
   (setq r2 (sqrt (/ (expt d 2) 2)))
   (setq pnt2 (list (+(car pnt1)f) (-(cadr pnt1)e) (caddr pnt1)))
   (setq pnt3 (list (+(car pnt1)f) (+(cadr pnt1)e) (caddr pnt1)))
   (setq pnt4 (list (-(+(car pnt1)f)d) (+(cadr pnt1)e) (caddr pnt1)))
   (setq pnt5 (list (-(-(+(car pnt1)f)d)r2) (+(-(+(cadr pnt1)e)d)r2) (caddr pnt1)))
   (setq pnt6 (list (-(+(car pnt1)f)c) (-(+(cadr pnt1)e)d) (caddr pnt1)))
   (setq pnt7 (list (-(+(car pnt1)f)c) (+(+(-(cadr pnt1)e)c)r)(caddr pnt1)))
   (setq pnt8 (list (+(-(-(+(car pnt1)f)c)r)r1)(-(+(+(-(cadr pnt1)e)c)r)r1)(caddr pnt1)))
   (setq pnt9 (list (-(-(+(car pnt1)f)c)r) (+(-(cadr pnt1)e)c) (caddr pnt1)))
   (setq pnt10 (list (+(-(car pnt1)f)d) (+(-(cadr pnt1)e)c) (caddr pnt1)))
   (setq pnt11 (list (-(+(-(car pnt1)f)d)r2)(+(+(-(cadr pnt1)e)d)r2)(caddr pnt1)))
   (setq pnt12 (list (-(car pnt1)f) (+(-(cadr pnt1)e)d) (caddr pnt1)))
   (setq pnt13 (list (-(car pnt1)f) (-(cadr pnt1)e) (caddr pnt1)))
   (setvar "osmode" 0)
   (command "._pline" pnt2 pnt3 pnt4 "_a" "_s" pnt5 pnt6 "_l" pnt7 "_a" "_s" pnt8 pnt9 "_l" pnt10
      "_a" "_s" pnt11 pnt12 "_l" pnt13 "_c")

这是一段画角钢的程序,是老外的

请教大家,r1,r2,与PNT5点,Pnt8点,PNt11点,啥关系,原来是啥
我想了半天没有想明白,请高手指点一下

ZZXXQQ 发表于 2014-8-7 15:15:17

r1,r2是用沟股定理计算的圆弧中间点坐标值(半径/根号2)
pnt5,pnt8,pnt11是圆弧中间点。
下面是压缩过的程序:(defun c:tt ()
(while (= nil (setq pt1 (getpoint "\nPick point to place angle: ")))
(alert "\nPlease pick a point")
)
(setq a 40.0 b 40.0 c 5.0)
(setq r c)
(setq d (/ c 2))
(setq e (/ a 2))
(setq f (/ b 2))
(setq x (car pt1) y (cadr pt1) z (caddr pt1))
(setq r1 (sqrt (/ (expt r 2) 2)))
(setq r2 (sqrt (/ (expt d 2) 2)))
(setq pt2 (list (+ x f) (- y e) z))
(setq pt3 (list (+ x f) (+ y e) z))
(setq pt4 (list (-(+ x f)d) (+ y e) z))
(setq pt5 (list (-(+ x f)d r2) (-(+ y e r2)d) z))
(setq pt6 (list (-(+ x f)c) (-(+ y e)d) z))
(setq pt7 (list (-(+ x f)c) (+(- y e)c r) z))
(setq pt8 (list (-(+ x f r1)c r) (+(- y e r1)c r) z))
(setq pt9 (list (-(+ x f)c r) (+(- y e)c) z))
(setq pt10 (list (+(- x f)d) (+(- y e)c) z))
(setq pt11 (list (+(- x f r2)d) (+(- y e)d r2) z))
(setq pt12 (list (- x f) (+(- y e)d) z))
(setq pt13 (list (- x f) (- y e) z)))
(setvar "osmode" 0)
(command "._pline" pt2 pt3 pt4 "_a" "_s" pt5 pt6 "_l" pt7 "_a" "_s" pt8 pt9 "_l" pt10
      "_a" "_s" pt11 pt12 "_l" pt13 "_c")
(princ)
)
还可以这样写:(defun c:tt ()
(while (= nil (setq pt1 (getpoint "\nPick point to place angle: ")))
(alert "\nPlease pick a point")
)
(setq a 40.0 b 40.0 c 5.0)
(setq r c)
(setq d (/ c 2))
(setq e (/ a 2))
(setq f (/ b 2))
(setq x (car pt1) y (cadr pt1) z (caddr pt1))
(setq r1 (sqrt (/ (expt r 2) 2)))
(setq r2 (sqrt (/ (expt d 2) 2)))
(setq pt0 (list (- x f) (- y e) z)))
(setq pt2 (list (+ x f) (- y e) z))
(setq pt3 (list (+ x f) (+ y e) z))
(setq pt4 (list (-(+ x f)d) (+ y e) z))
(setq pt5 (list (-(+ x f)c) (-(+ y e)d) z))
(setq pt6 (list (-(+ x f)c) (+(- y e)c r) z))
(setq pt7 (list (-(+ x f)c r) (+(- y e)c) z))
(setq pt8 (list (+(- x f)d) (+(- y e)c) z))
(setq pt9 (list (- x f) (+(- y e)d) z))
(setvar "osmode" 0)
(command "._pline" pt2 pt3 pt4 "_a" pt5 "_l" pt6 "_a" pt7 "_l" pt8 "_a" pt9 "_l" pt0 "_c")
(princ)
)
页: [1]
查看完整版本: 圆弧取点问题