amir0914 发表于 2022-7-5 15:49:35

用于转换十进制de的函数

大家好,我写了一个程序来计算度数,现在,我想要一个函数来将十进制度数转换为度数和分钟,有人能帮我吗?
(对不起,我的英语很差)

Lee Mac 发表于 2022-7-5 16:12:56

您可以使用angtof和angtos的组合。

BIGAL 发表于 2022-7-5 16:31:08

它只是数学1分钟=60秒1秒=360等等,只要继续固定小数并移动它。
 
30d 30’30”=30.50833333
 
所以fix=30
rem=。508333 * 60 = 30.49999
固定=30分钟
rem=。499999
*60=29.999999秒

hanhphuc 发表于 2022-7-5 16:39:39

 
 
另一种DIESEL方法,但不那么精确,需要四舍五入0.01

(defun hp:deg->dms (x) ;hanhphuc
(strcat (if (minusp x) "-" "")(itoa (fix (setq x (abs (atof (rtos x 2 5))))))
(menucmd (strcat "M=$(edtime,"
                   (rtos (/ (* (+ x 1e-8) 3600.) 86400.) 2 15)
                   ",° MM' SS)" )
           )
"\""
)
)

(hp:deg->dms 30.50833333)
;"30°30'30\""

(hp:deg->dms -36.87)
;"-36°52'12\""

(hp:deg->dms (cvunit (atan 3 4) "radians" "degrees"))
;"36° 52' 11\"测试
(defun c:BD2P ( / p1 p2 sudut jarak )
  (ai_sysvar (mapcar 'cons '( "ANGBASE" "ANGDIR" "OSMODE" "DIMZIN") (list (/ pi 2.) 1 9 0)))
  (and (setq p1 (getpoint "\nPilih titik 1 : "))
       (setq p2 (getpoint p1 "\nPilih titik 2 : "))
       (setq sudut (angle p1 p2))
       (mapcar '(lambda (x) (set x (mapcar '+ '(0. 0.) (trans (eval x) 1 0)))) '(p1 p2))
       (setq jarak (distance p1 p2))
       (entmake
         (list '(0 . "MTEXT")
               '(100 . "AcDbEntity")
               '(100 . "AcDbMText")
               '(8 . "BDIST")
               (cons 1 (strcat (hp:deg->dms (distof (angtos sudut 0 16))) "\\P" (rtos jarak 2 3)))
               (cons 10 (mapcar '(lambda (a b) (/ (+ a b) 2.)) p1 p2))
               (cons 40 (* jarak 0.025))
               (cons 50 (angle p1 p2))
               '(71 . 5)
               '(72 . 5)
         )
       )
  )
  (ai_sysvar nil)
  (princ)
)
                            

amir0914 发表于 2022-7-5 16:50:33

大家好,谢谢你们的回复,
页: [1]
查看完整版本: 用于转换十进制de的函数