明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
12
返回列表 发新帖
楼主: mahuan1279

[源码] 采用连分数法求单一规格矩形剪切下料问题

[复制链接]
 楼主| 发表于 2019-10-4 20:30:51 | 显示全部楼层
皇上快溜 发表于 2019-10-4 16:31
这方法好妙,谢谢你的好程序,,,

不过循环似乎有点问题,照你的方法改了一下,现在只能产生第一个 ...

循环没问题啊。你改动哪里呢?
发表于 2019-10-5 00:53:38 | 显示全部楼层
mahuan1279 发表于 2019-10-4 20:30
循环没问题啊。你改动哪里呢?

我只改了这些。。。
  (setq        LA (getreal "母材长边长度\nLA=:")
        LB (getreal "母材短边长度\nLB=:")
        c  (getreal "构件长边长度\nc=:")
        d  (getreal "构件短边长度\nd=:")

        LA (fix (* LA 1000))
        LB (fix (* Lb 1000))
        c  (fix (* c 1000))
        d  (fix (* d 1000))
  )
以及画矩形那三处,如:
  (entmake
    (list
      '(0 . "LWPOLYLINE")
      '(100 . "AcDbEntity")
      '(100 . "AcDbPolyline")
      '(90 . 4)
      '(70 . 1)
      (cons 10 (list (car pt) (cadr pt)))
      (cons 10 (list (+ (car pt) (/ LA 1000.0)) (cadr pt)))
      (cons 10
            (list (+ (car pt) (/ LA 1000.0))
                  (+ (cadr pt) (/ Lb 1000.0))
            )
      )
      (cons 10 (list (car pt) (+ (cadr pt) (/ Lb 1000.0))))
      (cons 210 '(0 0 1))
    )
  )

请你看看,有无弄错?

之前,上面那个回帖,认识有误,确实不是循环问题

现在程序运行结果是:能完整出图,包括大矩形很一众小矩形,只是小矩形彼此间存在间距,间距很大,估计是数值1000产生出来的。

所以,我理解,可能还有一两个变量须除于1000才行,不知是不这样?

 楼主| 发表于 2019-10-5 10:09:39 | 显示全部楼层
皇上快溜 发表于 2019-10-5 00:53
我只改了这些。。。
  (setq        LA (getreal "母材长边长度\nLA=:")
        LB (getreal "母材短边长度\nLB=:")
...

完全没必要乘以1000,再除以1000。如果实数不超过三位小数应该是没问题,超过了就产生了错误。按整数输入,再缩小10^n就好了。
发表于 2019-10-5 17:08:22 | 显示全部楼层
mahuan1279 发表于 2019-10-5 10:09
完全没必要乘以1000,再除以1000。如果实数不超过三位小数应该是没问题,超过了就产生了错误。按整数输入 ...

直接用实数很慢的,差不多十分钟未反应,用getint不接受实数,只好用getreal,,,再取整

请问决定小矩形彼间距的变量是哪两个?
发表于 2019-10-6 14:42:12 | 显示全部楼层
mahuan1279 发表于 2019-9-28 12:04
有思路就继续,没思路就暂放。不能强求一次到位。

有没有想过把板件间隙和板件方向条件加进去!
 楼主| 发表于 2019-10-6 19:06:41 | 显示全部楼层
本帖最后由 mahuan1279 于 2019-10-6 19:17 编辑

发现存在一些问题,如(3000 2000 80 70)会出现死机(一直处于运行状态)。但(300 200 8 7)却不会。理应两者的布局应相同(毛坯个数相同),仅仅比例大小不一样而已。经检查,(xl  300 200 8 7)=1068,而(xl  3000 2000 80 70)=950.故while语句一直处于死循环状态,三个分区的毛坯个数之和永远大于整体的毛坯个数。看来连分数法应适用在一定范围内,而不是所有范围。
看来,先要比较下(LA*LB)/(c*d)与(xl  LA LB c d)是否相差不大。否则会出现死循环。

本帖子中包含更多资源

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

x
 楼主| 发表于 2019-10-31 09:29:41 | 显示全部楼层
mahuan1279 发表于 2019-10-6 19:06
发现存在一些问题,如(3000 2000 80 70)会出现死机(一直处于运行状态)。但(300 200 8 7)却不会。理应 ...

忘了连分法的前提是c、d要互质。若是c、d有大于1的公约数q,则(LA,LB,c,d)=(LA/q,LB/q,c/q,d/q).
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-5-18 14:14 , Processed in 0.160379 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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