明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3059|回复: 17

[求助]如何控制在LISP程序中數值變量的精度

  [复制链接]
发表于 2004-10-19 14:34:00 | 显示全部楼层 |阅读模式
如何控制在LISP程序中数值变量的精度?我将一段线等分几段后,每段都为整数长度(S=50.00),但是我(PRINC S )后,显示的却是50.01.
发表于 2004-10-19 14:50:00 | 显示全部楼层
Paste your code.
发表于 2004-10-19 15:47:00 | 显示全部楼层

我对Spline测试等距太约误差在49.9999~50.0002

其它线型都很准!!

 楼主| 发表于 2004-10-20 08:57:00 | 显示全部楼层
;等分实体(螺牙孔)
(defun c:dv(/ ss1 ss2 ssna1 sslist1 sslist2 ssna2 ssassoc1 ssassoc2
v1 v2 n x v12y v12x disx disy dis mmx mmy
x1 y1 diss vsx vxy vsy v1y v2y v1x v2x)
(setvar "cmdecho" 0)
(command "osnap" "cen,int,end")
(setq ss1(ssget))
(setq ss2(ssget "p" (list(cons 0 "circle"))))
(setq ssna1(ssname ss2 0))
(setq sslist1(entget ssna1))
(setq ssassoc1(assoc 10 sslist1))
(setq v1x(cadr ssassoc1))
(setq v1y(caddr ssassoc1))
(setq v1(list v1x v1y))
(setq v2(GETPOINT "\nSelect Point 2:"))
(setq n(getint "\nNumber of segments:"))
(setq x 1)
(setq v2x(car v2))
(setq v2y(cadr v2))
(setq v12y(- v2y v1y))
(setq v12x(- v2x v1x))
(setq disy(/ v12y n))
(setq disx(/ v12x n))
(setq vsy(rtos disy 2 1))
(setq disy(atof vsy))
(setq mmy(fix disy))
(if(>= disy (+ 0.5 mmy))(setq disy(+ mmy 1))(setq disy mmy))
(setq vsx(rtos disx 2 1))
(setq disx(atof vsx))
(setq mmx(fix disx))
(if(>= disx (+ 0.5 mmx))(setq disx(+ mmx 1))(setq disx mmx))
(setq dis(sqrt(+(* disx disx)(* disy disy))))
(setq diss(rtos dis 2 1))
(setq dis(atof diss))
(while (< x n)
(setq y1(+(* x disy) (cadr v1)))
(setq x1(+(* x disx)(car v1)))
(setq vxy(list x1 y1))
(command "osnap" "none""copy" ss1 "" v1 vxy "")
(setq x (+ x 1))
)
(princ"\nDistance:")
(princ dis)
(princ)
(setvar "cmdecho" 1)
)
(prompt "\n*****************<C:DV.LSP>************")
(prin1)


 楼主| 发表于 2004-10-20 10:20:00 | 显示全部楼层
<IMG src="file:///D:/Clipboard01.jpg">


用法。
 楼主| 发表于 2004-10-20 10:24:00 | 显示全部楼层

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2004-10-20 11:43:00 | 显示全部楼层
最后的1是(setvar "cmdecho" 1)的回传值
(princ "\nDistance:")
(princ DIS)
(princ)
(setvar "cmdecho" 1)
(princ);;增加即可
)

程序缺点太多不能尽录 8-)

 楼主| 发表于 2004-10-20 15:54:00 | 显示全部楼层
多谢指教!
 楼主| 发表于 2004-10-20 16:02:00 | 显示全部楼层
请各位指出我程序上的不足之处,多谢。这个对我很重要.
发表于 2004-10-20 17:07:00 | 显示全部楼层
  1. ;;简单写写供参考,NO ERROR CHECK
  2. (defun C:TT (/ HOLDOSMODE ENT PT1 PT2 NUM ANG DIST DIST1)
  3.    (setq HOLDOSMODE (getvar "OSMODE"))
  4.    (if (setq ENT (ssget))
  5.        (progn
  6.            (setvar "osmode" 39)
  7.            (setq PT1 (getpoint "\n基准点: "))
  8.            (setq PT2 (getpoint PT1 "\n第2点: "))
  9.            (setq NUM (getint "\nNumber of segments:"))
  10.            (setq ANG (angle PT1 PT2))
  11.            (setq DIST   (/ (distance PT1 PT2) NUM)
  12.                              DIST1 DIST
  13.            )
  14.            (setvar "osmode" 0)
  15.            (repeat NUM
  16.   (setq PT2 (polar PT1 ANG DIST))
  17.   (command "._COPY" ENT "" PT1 PT2)
  18.   (setq DIST (+ DIST DIST1))
  19.            )
  20.            (princ "\nDistance:")
  21.            (princ DIST1)
  22.        )
  23.    )
  24.    (setvar "osmode" HOLDOSMODE)
  25.    (princ)
  26. )
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-18 11:48 , Processed in 0.222122 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表