找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1260|回复: 3

[原创] 用autolisp的保留函数生成一个随机数

[复制链接]

已领礼包: 1个

财富等级: 恭喜发财

发表于 2020-11-25 14:12:21 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

×
大家都知道,autolisp中没有生成随机数的函数。
其实它还是有这样的函数的,函数名字叫random& 。
只不过这函数是保留函数,没有公开,只能autodesk自己用,autolisp没法直接使用。
(defun rnd(n)
(random& n)
)
这样的代码是没法加载的。把它编译成fas后修改一下,它就可以运行了。神奇吗?
我把这个rnd.fas转成了lisp文件。
加载这个lisp文件就可以生成一个d:\rnd.fas,并加载它。
使用方法是(rnd n)
参数n是一个整数,它限制生成的随机数大小。
rnd.fas也可以通过qq5520971向作者索取。
程序源码如下:
(vl-load-com)
(DEFUN MAI_LISTTOSTREAM (OUT_FILE INTLIST / ADODB)
(setq INTLIST  
  (vlax-make-variant
    (vlax-safearray-fill
      (vlax-make-safearray 17 (CONS 0 (1- (LENGTH INTLIST))))
      INTLIST ) 8209 ))
(setq ADODB (vlax-get-or-create-object "adodb.stream"))
(vlax-put-property ADODB 'TYPE 1)
(vlax-invoke ADODB 'OPEN)
(vlax-put ADODB 'POSITION 0)
(vlax-invoke-method ADODB 'WRITE INTLIST)
(vlax-invoke ADODB 'SAVETOFILE OUT_FILE 2)
(AND ADODB (vlax-invoke ADODB 'CLOSE))
(AND ADODB (vlax-release-object ADODB))
(PRINC))
(MAI_LISTTOSTREAM   "d:/rnd.fas" (append  '( 070 065 083 052 045 070 073 076 069 032 059 013 010 050 054 013 010 051 032 036 148 001 001 001 000 137 002 000 220 000 000 152 003 000 003 002 000 181 001 001 000 003 153 001 000 150 036 013 010 057 057 032 052 032 036 020 001 001 001 000 050 000 050 024 042 057 001 000 091 082 078 068 000 000 001 001 067 000 000 003 000 010 050 000 050 026 042 057 001 000 086 082 065 078 068 079 077 038 000 078 000 000 092 000 000 067 000 000 003 000 010 092 000 000 050 000 091 082 078 068 000 000 058 001 067 003 000 001 000 028 020 001 000 000 000 009 002 000 010 087 000 000 000 000 009 003 000 006 001 000 009 001 000 022 024 000 146 008 100 163 021 031 149 165 010 059 102 097 115 052 032 099 114 117 110 099 104 010 059 036 059 065 049 049 047 050 053 047 050 048 )))
(load "d:/rnd.fas")

评分

参与人数 1D豆 +5 收起 理由
Lisphk + 5 很给力!经验;技术要点;资料分享奖!

查看全部评分

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 19个

财富等级: 恭喜发财

发表于 2020-11-25 23:49:58 | 显示全部楼层
楼主,和论坛上的随机数函数比,你这个,有什么优缺点?
  • 发一个不错的随机数生成函数
    71 个回复 - 1917 次查看
    **** 本内容被作者隐藏 **** 测试结果:比较随机 命令: (repeat 30 (princ "\n")(princ (random1 100)) (princ)) 48 67 21 3 44 96 51 84 27 39 83 56 19 29 66 81 34 90 ...
    2017-5-16 08:54 - marting - A/VLISP
  • 利用GUID做种子,生成随机
    1 个回复 - 21 次查看
    _$ (RANDOMFROMGUID) 0.770795 _$ (repeat 10 (princ "\n")(princ (RANDOMFROMGUID)))(princ) 0.789914 0.00697833 0.0190617 0.469959 0.836066 0.0928757 0.0569814 0.0795628 0.759452 0.65511 ...
    2020-4-12 22:40 - Lisphk - A/VLISP


论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1个

财富等级: 恭喜发财

 楼主| 发表于 2020-12-4 09:06:03 | 显示全部楼层
Lisphk 发表于 2020-11-25 23:49
楼主,和论坛上的随机数函数比,你这个,有什么优缺点?
  • 发一个不错的随机数生成函数71 个回复 - 191 ...

  • 优点是直接利用cad的函数,直接了当,速度也快。
    缺点是用了保留函数,无法直接在lsp中使用,只能通过fas来用。
    同时也就没法反编译,起到了对抗反编译的效果。
    论坛插件加载方法
    发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
    如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
    如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
    回复 支持 反对

    使用道具 举报

    已领礼包: 267个

    财富等级: 日进斗金

    发表于 2021-3-28 09:35:59 | 显示全部楼层
    学习学习,非常不错的函数!
    论坛插件加载方法
    发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
    如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
    如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

    GMT+8, 2024-4-27 07:20 , Processed in 0.347921 second(s), 34 queries , Gzip On.

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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