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才行,不知是不这样?

mahuan1279 发表于 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
有思路就继续,没思路就暂放。不能强求一次到位。

有没有想过把板件间隙和板件方向条件加进去!

mahuan1279 发表于 2019-10-6 19:06:41

本帖最后由 mahuan1279 于 2019-10-6 19:17 编辑

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

mahuan1279 发表于 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).
页: 1 [2]
查看完整版本: 采用连分数法求单一规格矩形剪切下料问题