乐筑天下

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

[编程交流] 这昨天起作用了,但没有

[复制链接]

33

主题

96

帖子

65

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
170
发表于 2022-7-5 16:49:36 | 显示全部楼层 |阅读模式
这个Lisp程序昨天对我有效。我今天试了一下,这样我可以添加更多,但它停止了工作,并给了我这个错误。(错误:错误的参数类型:numberp:nil)
我找到了零的位置,但不确定如何使其工作。零在a4。它不是将2个数字除以。
 
  1. (defun c:fdf (/ a5 a4 bmwdth bmcnt bmcnt1 bmcnt2 ptx1 ptx2 dltx dltx1 *error* of undo doc ss)
  2. (vl-load-com)
  3. ;(command "setvar" "hpcolor" "bylayer")
  4. ;(command "setvar" "hplayer" ".")
  5. (setq layerset (getvar "clayer"))
  6. (setq bmwdth (atoi (getstring "Width of beams: "))) ;get beam width
  7. (setq bmcnt (atoi (getstring "Number of beams: "))) ;beam count
  8. (setq bmcnt1 (- 1 bmcnt)) ;minus one beam for space in between beams
  9. (setq bmcnt2 (* bmcnt1 -1))
  10. (setq ptx1 (getpoint))    ;get first point for the delta x
  11. (setq ptx2 (getpoint))    ;get second point for delta x
  12. (setq dltx (- (car ptx1) (car ptx2)))    ;get the detla x by minusing ptx1 and ptx2
  13. (setq dltx1 (* dltx -1)) ;turn negitive to positve
  14. (setq crtdst (- dltx1 bmwdth))        ;minus beam width from dist to get correct dist to divide
  15. (setq hlfbmwdth (/ bmwdth 2))        ;divide beam width in half
  16. (setq ptx3 (car ptx1)) ;first coordinate in point
  17. (setq strtloc (+ ptx3 hlfbmwdth)) ;start location for beams
  18. (setq ptx4 (cadr ptx1)) ;second coordinate in point
  19. (setq ptx5 (list strtloc ptx4)) ;both coordinates in a list
  20. (setvar "hporigin" ptx5) ;setting the start point for beams
  21. (setq strtloc (+ ptx3 hlfbmwdth2)) ;start location for beams
  22. (setq a4 (/ crtdst bmcnt2)) ;divide for beam spacing
  23. (setq a5 (* a4 -1)))))
回复

使用道具 举报

66

主题

1552

帖子

1514

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
325
发表于 2022-7-5 16:55:51 | 显示全部楼层
删除此行:
  1. (setq a3 (

更改此行:
  1. (setq a5 (* a4 -1)))))

收件人:
  1. (setq a5 (* a4 -1)))
回复

使用道具 举报

33

主题

96

帖子

65

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
170
发表于 2022-7-5 17:03:42 | 显示全部楼层
对不起,那不应该在那里。(setq a3(
我把它拿了出来。在我把它贴到这里之前,我正在尝试一些东西。没有了a4仍然为零。
回复

使用道具 举报

66

主题

1552

帖子

1514

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
325
发表于 2022-7-5 17:08:07 | 显示全部楼层
好的,下面是一些解剖:
  1. (defun c:fdf ( / a4 a5 bmcnt bmcnt1 bmcnt2 bmwdth crtdst dltx dltx1 hlfbmwdth hlfbmwdth2 layerset ptx1 ptx2 ptx3 ptx4 ptx5 strtloc )
  2. (if
  3.    (and ; prompt the user for inputs
  4.      (not (initget 6))
  5.      (setq bmwdth (getint "Width of beams: ")) ;get beam width
  6.      (not (initget 6))
  7.      (setq bmcnt (getint "Number of beams: ")) ;beam count
  8.      (setq ptx1 (getpoint "\nFirst point for delta x <exit>: "))    ;get first point for the delta x
  9.      (setq ptx2 (getpoint ptx1 "\nSecond point for delta x <exit>: "))    ;get second point for delta x
  10.    )
  11.    (progn ; proceed with calculations
  12.      ;(command "setvar" "hpcolor" "bylayer")
  13.      ;(command "setvar" "hplayer" ".")
  14.      (setq layerset (getvar "clayer"))
  15.      
  16.      (setq bmcnt1 (- 1 bmcnt)) ;minus one beam for space in between beams
  17.      (setq bmcnt2 (* bmcnt1 -1))
  18.      (setq dltx (- (car ptx1) (car ptx2)))    ;get the detla x by minusing ptx1 and ptx2
  19.      (setq dltx1 (* dltx -1)) ;turn negative to positive
  20.      (setq crtdst (- dltx1 bmwdth))        ;minus beam width from dist to get correct dist to divide
  21.      (setq hlfbmwdth (/ bmwdth 2))        ;divide beam width in half
  22.      (setq ptx3 (car ptx1)) ;first coordinate in point
  23.      (setq strtloc (+ ptx3 hlfbmwdth)) ;start location for beams
  24.      (setq ptx4 (cadr ptx1)) ;second coordinate in point
  25.      (setq ptx5 (list strtloc ptx4)) ;both coordinates in a list
  26.      (setvar "hporigin" ptx5) ;setting the start point for beams
  27.      (setq strtloc (+ ptx3 [color="red"]hlfbmwdth2[/color])) ;start location for beams
  28.      (setq a4 (/ crtdst bmcnt2)) ;divide for beam spacing
  29.      (setq a5 (* a4 -1))
  30.    ); progn
  31. ); if
  32. ); defun
  33. (vl-load-com)

hlfbmwdth2变量未分配到任何位置。
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
358
发表于 2022-7-5 17:15:33 | 显示全部楼层
用GETDIST函数替换(atoi(getstring…)。
还有一个额外的括号。
回复

使用道具 举报

33

主题

96

帖子

65

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
170
发表于 2022-7-5 17:22:02 | 显示全部楼层
Tharwat谢谢你的信息,但a4仍然为零。可能我正在做的数学有多错。
 
(/crtdst bmcnt2)
crtdst是一个十进制数
bmcnt2是整数
回复

使用道具 举报

33

主题

96

帖子

65

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
170
发表于 2022-7-5 17:29:38 | 显示全部楼层
再次谢谢你。
我想出来了。它确实与hlfbmwdth2有关。
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
358
发表于 2022-7-5 17:36:54 | 显示全部楼层
 
很高兴听到这个消息。
但您的感激之情这次必须转达给Grrr。
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 17:38:47 | 显示全部楼层
J_spawn_h当将int除以实数时,您可以得到一个整数答案。如果您希望准确无误,最好在代码中使用2.0(setq hlfbmwdth(/bmwdth 2.0))这将允许0.5作为答案。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 17:46:33 | 显示全部楼层
 
不完全是这样——当整数除以实数(double)时,你只会得到一个double;只有将两个整数除时,结果才会始终是整数(可能是意外的)-请注意:
  1. _$ (/ 1.0 2.0)
  2. 0.5
  3. _$ (/ 1 2.0)
  4. 0.5
  5. _$ (/ 1.0 2)
  6. 0.5
  7. _$ (/ 1 2)
  8. 0
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-13 10:48 , Processed in 0.693000 second(s), 83 queries .

© 2020-2025 乐筑天下

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