找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 862|回复: 3

[求助]: 老杆子遇到大难题!

[复制链接]
发表于 2005-1-30 17:48:22 | 显示全部楼层 |阅读模式

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

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

×
已知一个表(X0,X1,X2,X3,X4,,,,,,,Xn) 代表了X轴上n个点的x坐标.
并且相邻两点的间距大小在20到200之间,如果X1,X2,,,,,,Xn-1坐标点可以在-2~+2范围内微调,
问:如何得到两点之间,间距种类最少的,经过调整后的坐标表?
如果有多解,取一种就行了.
X1,,,,,XN 已知.
..........
(SETQ LST (LIST X1 X2 X3 X4 X5,,,,,,Xn))
;求相邻两点的距离(S1,S2,S3,,,,,Sn)
;S1=X1-X0,S2=X2-X2,,,,,,,,,,,Sk=Xk-Xk-1
(SETQ K 0
      N (LENGTH LST)
)
(while (<k n)
   (setq s (- (nth (1+ k) lst)(nth k lst))
   (setq lst2(lst2 con s))
).....................
请求给出算法!(最好是lisp或Vlisp)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2005-1-31 01:35:39 | 显示全部楼层
先下载"xyp_lib.lsp":http://www.xdcad.net/forum/showthread.php?s=&threadid=325268
[PHP] (load "xyp_lib.lsp")
(defun c:test ()
  (cmdla0)
  (SETQ        LST        (LIST 9 2 11 56 30 1 8 33)
        ;;(LIST X1 X2 X3 X4 X5 . . . Xn)
        LST-new        (vl-sort lst '<)
  )
  (princ "\n 旧表 =")
  (princ lst)
  (princ "\n 新表 =")
  (princ lst-new)
  (princ "\n相邻两点的距离分别是 : ")
  (while (setq xx1 (car lst-new))
    (setq LST-new (vl-remove xx1 lst-new))
    (if        (setq xx2 (car lst-new))
      (progn
        (setq dist    (- xx2 xx1)
              LST-new (vl-remove xx1 lst-new)
        )
        (princ "\n")
        (princ dist)
      )
    )
  )
  (cmdla1)
)
[/PHP]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

 楼主| 发表于 2005-2-1 12:18:47 | 显示全部楼层
谢谢长老!
这其实是一个钢筋的智能搭接问题,譬如,一般梁上部钢筋在跨中搭接,但是具体的搭接位置
却在一定范围内都可以,要考虑施工方便和减少材料品种,这才引出了上述问题.呵呵,是我自己想
复杂了,考虑了对整个x1,,,,,Xn的移动,考虑了全遍历.考虑了,多次循环后,虽然可以得到答案,也许把可以
不调整的位置调整了,不好.---等等.
呵呵.
现在,我自己也解决了.介绍给大家,希望能博一笑!
思路:
1,对N跨梁,其最左,最右,是固定的.(为柱边-保护层厚度)这是不变的.
2,第一个搭接位置,暂取梁跨的中点,算出长度 l
3,查讯已经使用过的规格(长度)中,有无合适的(即在允许调整范围内的最接近的已有长度)
如果查到,就返回最接近的已有长度; lll
如果没有,就对长度整(满足长度尾数20cm,50cm,80cm,0cm--简称"2580"),返回:lll
并填加到"已有规格" lst2 表,中.
4,调整搭接点位置.
5,取下一个跨中. 再计算出长度 l
6,循环,3,4,5
7,判断已到最后一跨了,,,,,,,直接取2580
这样,就是,最优的搭接方案了:
---控制了钢筋在搭接允许偏差内钢筋长度的种类最少.
下面是简单的调试程序: 欢迎指正!
(defun c:test (/ lst2) ;给8个长度值,200~2000(实际工程跨度一般在2米~20m).
  (setq lst2 '())   ;已经采用的长度规格的表
  (setq n 8)
  (repeat n
    (SETQ l (getint "测试长度:"))
    (setq lll (near_len l))
    (princ lll)  ;返回,最合适的经过调整的可取长度.
    (princ lst2) ;显示已采用的规格库
  )

  (princ)
)
(defun near_len        (l / b k add dec tmp bk) ;查询表中有无相近的,
                                        ;若没有就取最接近的2580,并添加到表;若有就返*回*2580的值

  (if (= (length lst2) 0)
    (setq bk   (near_258 l)
          lst2 (cons bk lst2)
    )
  )
  (SETQ        k   0
        dec 100
  )
  (repeat (length lst2)                        ;TW_W_int2580
    (setq b   (nth k lst2)
          tmp (abs (- l b))
    )
    (if        (< tmp dec)
      (progn
        (setq dec tmp
              bk  b
        )
      )
      (setq k (1+ k))
    )
  )
  (if (>= dec 30)   ;搭接点控制误差允许30cm
    (setq bk   (near_258 l)
          lst2 (cons bk lst2)
    )
  )
  bk
)
(defun near_258        (l / a b l2 back)        ;入口不规整长度,返回最接近的满足2580的长度
  (SETQ        l2 (- l 20.0)
        a  (tw_w_int2580 l)
        b  (tw_w_int2580 l2)
  )
  (if (> (abs(- a l))(abs(- l b)))
    (setq back b)
    (setq back a)
  )
  back
)
(defun TW_W_int2580 (i5 / i i1 i2 i3 i4) ;入口不规整长度,返回刚好比原长度大一点点的,符合2580的长度.
  (setq i (/ i5 100.0))
  (setq i1 (fix i))
  (setq i2 (- i i1))
  (cond
    ((and (> i2 0.0) (< i2 0.201))
     (setq i3 0.2)
    )
    ((and (> i2 0.2) (< i2 0.501))
     (setq i3 0.5)
    )
    ((and (> i2 0.5) (< i2 0.801))
     (setq i3 0.8)
    )
    ((> i2 0.8)
     (setq i3 1.0)
    )
    (t (setq i3 0.0))
  )
  (setq i (+ i3 i1))
  (setq i4 (* i 100.0))
  i4
)
完!   再次感谢长老!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-28 15:20 , Processed in 0.392591 second(s), 35 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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