明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1962|回复: 8

长度的非线性放大

[复制链接]
发表于 2004-1-4 08:03:00 | 显示全部楼层 |阅读模式
请教:
如何获取物体的长度(在x, y, z方向上),该函数的目的是SCALE一个物体,比例是关于长度的非线性函数,所以想先获得物体的原长度,再代入这个函数得到新的长度,再把这个新长度赋给物体,这三步我都不是很清楚,请帮我修改一下下面的程序,它是针对一个box的,如果是关于一个较复杂的电视机的,该如何操作?谢谢你们!
xqy66@hotmail.com



DEFUN XFunc
(Xscale)
  (+ (EXPT Xscale 3.0) Xscale 1.0)
)

(DEFUN YFunc (Yscale)
  (+ (* Yscale Yscale) (* 2.0 Yscale) 5.0)
)

(DEFUN ZFunc (Zscale)
  (+ (EXPT Zscale 1.0) Zscale 2.0)
)

(DEFUN bboxe (bbox / L W H UX UY UZ)
(SETQ bbox ((VLA-GETBOUNDINGBOX obj 'll 'ur)
                (MAPCAR 'VLAX-SAFEARRAY->LIST (LIST ll ur)))
  )
  (SETQ ll (CAR bbox)
        ur (CADR bbox)
  )
  (SETQ L1 (- (CAR ur) (CAR ll))
        W1 (- (CADR ur) (CADR ll))
        H1 (- (CADDR ur) (CADDR ll))
  )
   
  (SETQ L (APPLY 'XFunc (LIST L1))
        W (APPLY 'YFunc (LIST W1))
        H (APPLY 'ZFunc (LIST H1))
  )
  (SETQ UX (+ (CAR ur) L)
        UY (+ (CADR ur) W)
        UZ (+ (CADDR ur) H)
  )
  
  (VLAX-SAFEARRAY-PUT-ELEMENT bbox 2 1 UX)
  (VLAX-SAFEARRAY-PUT-ELEMENT bbox 2 2 UY)
  (VLAX-SAFEARRAY-PUT-ELEMENT bbox 2 3 UZ)
  
  (VLAX-SAFEARRAY->LIST bbox)
)

(DEFUN c:testbb              (/ obj bbox L W H)
  (vl-load-com)
  (SETQ obj (VLAX-ENAME->VLA-OBJECT (CAR (ENTSEL "\nPick the box to
scale: "))))
  (bboxe obj XFunc YFunc ZFunc)
  (PROMPT "\box has been scaled.")
  (PRINC)
)
发表于 2004-1-4 09:23:00 | 显示全部楼层
1、“该函数的目的是SCALE一个物体”,acad的块插入insert指令就可以指定X,Y,Z的方向的比例,这个好像和你说的不一样
2、”比例是关于长度的非线性函数“,由于这个非线性函数的不确定性,所得到的物体不确定,所以难以找到 通用解决手段,只能按照你实际的需要设置边界条件,才能得到相对贴切的解。因为按照我的理解,这种“参数化”的问题,其边界条件(作用范围)最重要的,简单的解决方法是没有的,可以参考这里的“参数化”设计相关的内容。
3、从你的程序上看不过是得到一个点,该点相对于物体原点进行比例调整,到不成问题。不过如果是一个物体,就会出现由于”比例是关于长度的非线性函数“而发生的变形,你必须用”微分“方法解决了,呵呵,开个玩笑。
4、你的程序我看不懂,别笑话,那些VLA。。。的我真不知道怎么用。不过大的方向我还是要指出的,如果物体是由许多线段组成的,按照你的非线性函数计算对应端点,然后连接线段就行了。如果物体还有圆弧、半球等组成部分的,那么,你也许还需解决物体的形状参数相对于”关于长度的非线性函数“用什么关联函数处理的问题,就是说,边界条件要现去确定了。
5、好了,没什么说的了,按照你的需要去构造足够好的关联函数解决这个问题就行了。
发表于 2004-1-4 15:35:00 | 显示全部楼层
程序是你写的吗?关于参数传递上很乱,根本无法运行的。。。
主函数参数是obj xfunc yfunc zfunc四个参数,可子函数却只有bbox一个函数,从子函数内容看,不仅参数个数不对,就是类型也不对,子函数中bbox另有取值语句,根本不需要参数中传递,而变量obj却不知从何而来。
还有就是把xfunc yfunc zfunc三个函数名作为参数又是何意思?

bboxe中问题也是一大把,第一句setq 后面的东西有问题,相当于将(VLA-GETBOUNDINGBOX obj 'll 'ur)计算结果作为函数了,而实际上根本没有这个函数,如果是想按顺序计算两个值,返回后一个计算结果,应该加progn函数。
然后就是bbox变量,你一会当它是列表来使用,一会又当它是safearray来使用。。。肯定有一个是会出错的。

其余未细看,也未琢磨功能。。。如果这个程序不是你写的,建议将这些话给它看看。。。
 楼主| 发表于 2004-1-5 10:35:00 | 显示全部楼层
谢谢你们的建议,如果可以请给我发email,我可以将简图发给你们,并附上说明。这里先简单说一下,有个盒子,不同的边长,制造后缩小比例不同,有个非线性的关系(放大尺寸vs设计尺寸),希望能每次输入这个程序后,autocad可以自动获取物体的设计长度,代入非线性方程,得到个放大了的尺寸,以使得制造后能得到缩小到设计尺寸的物体。可以先以立方体为例。谢谢你们花时间在这上面。

例外,我是个新手,请问哪本中文的书关于visual lisp的比较好,谢谢。
发表于 2004-1-5 13:37:00 | 显示全部楼层
你把资料发到这里吧

陈伯雄老师有本LISP的书不错的
 楼主| 发表于 2004-1-6 03:23:00 | 显示全部楼层
小,中,大盒子的x方向的长度的放大没有同样的比例,放大尺寸与原长度成非线性关系,例如:制造后的长度=y;设计长度=x
y=x^2+x+2

1。获得原长度
2,代入方程后得到新长度
3,返回长度给物体。


谢谢!

请问那本书叫什么名字?
 楼主| 发表于 2004-1-6 03:25:00 | 显示全部楼层
我无法上传那个文件,已经发送到你的邮箱里了。谢谢!
 楼主| 发表于 2004-1-7 02:46:00 | 显示全部楼层
这是图形的doc格式。
 楼主| 发表于 2004-1-7 02:48:00 | 显示全部楼层
还是上传不了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-27 12:55 , Processed in 0.191483 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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