乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 138|回复: 9

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

[复制链接]

7

主题

29

帖子

2

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

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

使用道具 举报

16

主题

909

帖子

8

银币

中流砥柱

Rank: 25

铜币
973
发表于 2004-10-19 14:50:00 | 显示全部楼层
Paste your code.
回复

使用道具 举报

29

主题

1152

帖子

10

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1268
发表于 2004-10-19 15:47:00 | 显示全部楼层
我对Spline测试等距太约误差在49.9999~50.0002
其它线型都很准!!
回复

使用道具 举报

7

主题

29

帖子

2

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
57
发表于 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 (************")
         (prin1)
         
                         
回复

使用道具 举报

7

主题

29

帖子

2

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
57
发表于 2004-10-20 10:20:00 | 显示全部楼层

file:///D:/Clipboard01.jpg
用法。
回复

使用道具 举报

7

主题

29

帖子

2

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
57
发表于 2004-10-20 10:24:00 | 显示全部楼层

cmvizdvx3r3.jpg

cmvizdvx3r3.jpg

回复

使用道具 举报

29

主题

1152

帖子

10

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1268
发表于 2004-10-20 11:43:00 | 显示全部楼层
最后的1是(setvar "cmdecho" 1)的回传值
         (princ "\nDistance:")
         (princ DIS)
         (princ)
         (setvar "cmdecho" 1)
         (princ);;增加即可
)
程序缺点太多不能尽录                 8-)
回复

使用道具 举报

7

主题

29

帖子

2

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
57
发表于 2004-10-20 15:54:00 | 显示全部楼层
多谢指教!
回复

使用道具 举报

7

主题

29

帖子

2

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
57
发表于 2004-10-20 16:02:00 | 显示全部楼层
请各位指出我程序上的不足之处,多谢。这个对我很重要.
回复

使用道具 举报

29

主题

1152

帖子

10

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1268
发表于 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. )
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-8-20 20:07 , Processed in 1.692788 second(s), 76 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表