这方法好妙,谢谢你的好程序,,,
不过循环似乎有点问题,照你的方法改了一下,现在只能产生第一个 ...
循环没问题啊。你改动哪里呢? 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 00:53
我只改了这些。。。
(setq LA (getreal "母材长边长度\nLA=:")
LB (getreal "母材短边长度\nLB=:")
...
完全没必要乘以1000,再除以1000。如果实数不超过三位小数应该是没问题,超过了就产生了错误。按整数输入,再缩小10^n就好了。 mahuan1279 发表于 2019-10-5 10:09
完全没必要乘以1000,再除以1000。如果实数不超过三位小数应该是没问题,超过了就产生了错误。按整数输入 ...
直接用实数很慢的,差不多十分钟未反应,用getint不接受实数,只好用getreal,,,再取整
请问决定小矩形彼间距的变量是哪两个? mahuan1279 发表于 2019-9-28 12:04
有思路就继续,没思路就暂放。不能强求一次到位。
有没有想过把板件间隙和板件方向条件加进去! 本帖最后由 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-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]