找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 988|回复: 4

[求助]:怎样通过几点来通过算法求其形心?

[复制链接]
发表于 2003-1-9 08:51:29 | 显示全部楼层 |阅读模式

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

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

×

  1. ;;; 修正版BY LUCAS
  2. ;;; VxGetMassProps - Returns a list of all mass properties of the object
  3. ;;; -- Function VxGetMassProps
  4. ;;; Returns a list of all mass properties of the object.
  5. ;;; Copyright:
  6. ;;;   2001 MENZI ENGINEERING GmbH, Switzerland
  7. ;;; Arguments [Typ]:
  8. ;;;   Obj = Object [VLA-OBJECT]
  9. ;;; Return [Typ]:
  10. ;;;   > Mass properties '({Area Perimeter} {Mass Volume}
  11. ;;;                            Centroid          MomentOfInertia
  12. ;;;                            ProductOfInertia  RadiiOfGyration
  13. ;;;                            PrincipalMoments  PrincipalDirections
  14. ;;;                       ) [LIST]
  15. ;;; Notes:
  16. ;;; - VxGetMassProps is designed to handle closed *Polylines,
  17. ;;;   Regions and 3dsolids.
  18. ;;; - *Polylines and Regions returns 2D-lists in some parameters.
  19. ;;; - 2D-objects returns '({Area Perimeter}. . . . . . )
  20. ;;; - 3D-objects returns '({Mass Volume}. . . . . . )
  21. ;;; - Use a DocManagerReactor with a 'vlr-documentToBeDestroyed'-event
  22. ;;;   to release the Gb:AcO and Gb:AcD objects at the end of a
  23. ;;;   AutoCAD session - otherwise AutoCAD maybe crashes...
  24. ;;; USAGE: (VXGETMASSPROPS (vlax-ename->vla-object (car (entsel))))

  25. (defun VXGETMASSPROPS (OBJ / DELFLG RESLST TMPOBJ)
  26.   (setq        GB:ACO (cond (GB:ACO)
  27.                      ((vlax-get-acad-object))
  28.                )
  29.         GB:ACD (cond (GB:ACD)
  30.                      ((vla-get-activedocument GB:ACO))
  31.                )
  32.   )
  33.   (if (member (vla-get-objectname OBJ)
  34.               '("AcDb2dPolyline" "AcDbPolyline")
  35.       )
  36.     (setq DELFLG t
  37.           TMPOBJ (vlax-safearray-get-element
  38.                    (vlax-variant-value
  39.                      (vla-addregion
  40.                        (vla-get-modelspace GB:ACD)
  41.                        (VXLISTTOARRAY vlax-vbobject (list OBJ))
  42.                      )
  43.                    )
  44.                    0
  45.                  )
  46.     )
  47.     (setq TMPOBJ OBJ)
  48.   )
  49.   (setq        RESLST
  50.          (append
  51.            (list
  52.              (if (= (vla-get-objectname TMPOBJ) "AcDbRegion")
  53.                (list (vla-get-area TMPOBJ) (vla-get-perimeter TMPOBJ))
  54.                (list (vla-get-volume TMPOBJ) (vla-get-volume TMPOBJ))
  55.              )
  56.              (vlax-get TMPOBJ "centroid")
  57.              (vlax-get TMPOBJ "momentofinertia")
  58.              (if (= (vla-get-objectname TMPOBJ) "AcDbRegion")
  59.                (list (vlax-get TMPOBJ "productofinertia"))
  60.                (vlax-get TMPOBJ "productofinertia")
  61.              )
  62.              (vlax-get TMPOBJ "radiiofgyration")
  63.              (vlax-get TMPOBJ "principalmoments")
  64.              (vlax-get TMPOBJ "principaldirections")
  65.            )
  66.          )
  67.   )
  68.   (if DELFLG
  69.     (vla-delete TMPOBJ)
  70.   )
  71.   RESLST
  72. )


  73. ;;; (vlax-safearray->list (vlax-variant-value (vla-get-radiiofgyration TMPOBJ)))
  74. ;;; =
  75. ;;; (vlax-get TMPOBJ "radiiofgyration")


  76. ;;;VxListToArray - Converts a list into an array
  77. ;;; -- Function VxListToArray
  78. ;;; Converts a list into an array.
  79. ;;; Copyright:
  80. ;;;   ?000 MENZI ENGINEERING GmbH, Switzerland
  81. ;;; Arguments [Typ]:
  82. ;;;   Lst = Standard list [LIST]
  83. ;;;   Typ = Datatype [INT]
  84. ;;;         Constants:
  85. ;;;         - vlax-vbBoolean
  86. ;;;         - vlax-vbDecimal *)
  87. ;;;         - vlax-vbDouble
  88. ;;;         - vlax-vbInteger
  89. ;;;         - vlax-vbLong
  90. ;;;        - vlax-vbObject
  91. ;;;         - vlax-vbSingle
  92. ;;;         - vlax-vbString
  93. ;;;         - vlax-vbVariant
  94. ;;; Return [Typ]:
  95. ;;;   > Array [VARIANT]
  96. ;;; Notes:
  97. ;;;   *)Missing datatype in Visual LISP, initialize it in your Autoloader.
  98. ;;;   - Can't be used for dotted pair or nested lists.
  99. ;;;
  100. (defun VXLISTTOARRAY (TYP LST)
  101.   (vlax-make-variant
  102.     (vlax-safearray-fill
  103.       (vlax-make-safearray TYP (cons 0 (1- (length LST))))
  104.       LST
  105.     )
  106.   )
  107. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2003-1-9 09:17:55 | 显示全部楼层
黄兄求的是算法啊。数学上的算法。他不是说得很清楚了么。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2003-1-9 14:29:53 | 显示全部楼层
谢了谢了,谢谢LUCAS 你有好多好东西嘛:)
下面这个也能得到一个PL的形心点,它也是间接方法:)
  1. (defun pl_cen (poly / pl ms va reg cen)
  2.   (setq        pl (vlax-ename->vla-object poly)
  3.         ms (vla-get-modelspace
  4.              (vla-get-activedocument (vlax-get-acad-object))
  5.            )
  6.         va (vlax-make-safearray vlax-vbObject '(0 . 0))
  7.   )
  8.   (vlax-safearray-put-element va 0 pl)
  9.   (setq        reg (car (vlax-safearray->list
  10.                    (vlax-variant-value (vla-addregion ms va))
  11.                  )
  12.             )
  13.         cen (vla-get-centroid reg)
  14.   )
  15.   (vla-delete reg)
  16.   (vlax-safearray->list (vlax-variant-value cen))
  17. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 6530个

财富等级: 富甲天下

发表于 2003-1-9 16:27:37 | 显示全部楼层
看看这是你要的吗?(详见《实用土木工程手册》)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2003-1-10 09:24:49 | 显示全部楼层
最初由 ll_j 发布
[B]看看这是你要的吗?(详见《实用土木工程手册》) [/B]

对我要的就是这个东西!谢谢你,我的没有你那本手册。我那《建筑结构静力计算手册》中没有这个公式。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-22 14:57 , Processed in 0.424367 second(s), 40 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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