lostbalance 发表于 2013-11-10 20:57:22

取方位时,如何实现360°自动变0°

程序如下,作用是自动标出点的方位,方位大概和手表的顺时针差不多。用了cond后,一般没啥问题,但有几次遇到360°无法变0°的情况,是数字换算的误差吗?我现在是用359°的极近值来代替,有什么更好的方法吗?(defun C:FangWei(/ cir pt0 pt p jd ptx)
(setq cir (entget (car (entsel "\n选择圆: "))))
(WYB-entlay "3" 1 "center2");红色
(setq pt0 (cdr (assoc 10 cir)))
(setq pt (list (car pt0) (cadr pt0)))
(while
    (setq p (getpoint "\n选择方位点: "))
    (setq jd (angle p pt))
    (setq ptx (polar p jd -4.5))
    (cond
      ((<= jd (* pi 1.5)) (setq jd (- 270 (WYB-rtod jd))))
      ((> jd (* pi 1.5)) (setq jd (- 630 (WYB-rtod jd))))
    )
    (if (> jd 359.99999999) (setq jd 0))
    (WYB-enttext-all "3" ptx (strcat (rtos jd) "%%d") 3.5 0 "M")
)
(princ)
)

(defun WYB-rtod(r);弧度换成角度
    (/ (* r 180) pi)
)


(defun WYB-enttext-all(tc pt ss hh rr dz / dz1 dz2)
    (cond
      ((= dz "L") (setq dz1 0 dz2 0))
      ((= dz "C") (setq dz1 1 dz2 0))
      ((= dz "R") (setq dz1 2 dz2 0))
      ((= dz "A") (setq dz1 3 dz2 0))
      ((= dz "M") (setq dz1 4 dz2 0))
      ((= dz "F") (setq dz1 5 dz2 0))
      ((= dz "BL") (setq dz1 0 dz2 1))
      ((= dz "BC") (setq dz1 1 dz2 1))
      ((= dz "BR") (setq dz1 2 dz2 1))
      ((= dz "ML") (setq dz1 0 dz2 2))
      ((= dz "MC") (setq dz1 1 dz2 2))
      ((= dz "MR") (setq dz1 2 dz2 2))
      ((= dz "TL") (setq dz1 0 dz2 3))
      ((= dz "TC") (setq dz1 1 dz2 3))
      ((= dz "TR") (setq dz1 2 dz2 3))
    )
    (entmake
      (list
            '(0 . "TEXT")
            (cons 8 tc);图层
            (cons 10 pt);插入点,必须先预设该值,否则无法运行
            (cons 1 ss);内容
            (cons 40 hh);字高
            (cons 50 rr)
            (cons 41 0.7);字宽
            (cons 72 dz1)
            (cons 73 dz2)
            (cons 11 pt);对齐点
      )
    )
)

llsheng_73 发表于 2013-11-10 21:12:51

(remjd 360)

lostbalance 发表于 2013-11-10 22:15:04

llsheng_73 发表于 2013-11-10 21:12 static/image/common/back.gif
(remjd 360)

感谢回答。
不过刚才用这个代码跑了下,也有问题。后来终于发现是0°线各种处理后不直造成的。。。

逗亦斗霸 发表于 2024-9-17 14:44:43

llsheng_73 发表于 2013-11-10 21:12
(remjd 360)

感谢大佬的回复,为我现在遇到的问题提供了解决的思路~

lht 发表于 2024-9-17 18:58:50

(rem (- 450 ang) 360);ang为正东为0度逆时针方向的角度,转换成以正北方向为起点顺方向的角度.
页: [1]
查看完整版本: 取方位时,如何实现360°自动变0°