QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

查看: 9004|回复: 3
收起左侧

[已答复] CAD 三维图形的“几何中心”和“质心”的疑问

[复制链接]
发表于 2011-6-29 19:47:58 | 显示全部楼层 |阅读模式 来自: 中国山东青岛

马上注册,结识高手,享用更多资源,轻松玩转三维网社区。

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

x
先说一下cad用的是2011版本) X4 G1 o; P( E
我在cad里面做了3个实体,绿色那个是用union处理了的(图1),另外两个是对比测试的,请不要分心,呵呵
' z* I% h% R- i/ Y& Z* ]我的目的是要找到绿色实体的“几何中心”,当用鼠标选中绿色实体的时候,可以看到移动小控件是位于绿色实体的“几何中心”的,但是我获取不了这个几何中心的坐标。(图2)/ {+ p6 z% f$ F! T
于是想到了 massprop 这个命令,它能提取"质心",给出质心的坐标。我把目测的那个“几何中心”和“质心”都标出来了。(图3)
; I3 H0 c( Y# p2 K" v& j& _8 M/ W6 J9 h3 M' U8 x

6 x1 _2 l/ X' W& \0 d# ^4 _现在有一下几点让我迷惑:
9 |, N; u5 a7 \# V, e- y" {4 g1. 在cad的帮助里面,输入massprop 后看的的解释是:可以给出无论是二维还是三维物体的”形心“,注意,在帮助文件里面是 ”形心“,不是质心,但是在实际使用的时候却又显示的是”质心“,所以到底这个命令提取的是质心还是形心?6 o% }6 w4 ?, b
2.为什么 图3 中的几何中心和质心不重合呢? 既然cad里认为三维物体是均质的,那么我觉得 几何中心和质心应该重合才对,为何两者会有差别?) P/ O. e( u6 A! q; q% r8 _, H: b
   我做过测试,如果实体形状规则,就像那两个方块,这两个就会重合,而不规则的就会不重合。
4 `" l6 V' X1 q4 h  p2 j3.如果我想获得一个三维实体,尤其是不规则实体的 几何中心的坐标,就是移动小控件坐标原点的位置,我在cad里面应该怎么操作,用哪个命令呢?/ t* F7 F: h+ v/ n, l
最后把cad原文件附上,大家可以自己试试看。是不是几何中心和 质心 不重和。
( G/ l4 h' G, H5 _. J7 \8 t2 {" M另外大家有什么办法可以获得几何中心的坐标,请不吝赐教,谢谢!
2011-6-29 19-26-38.jpg
2011-6-29 19-30-02.jpg
2011-6-29 19-33-31.jpg

形心测试.dwg

133.22 KB, 下载次数: 1

评分

参与人数 1三维币 +5 收起 理由
★新手★ + 5 发帖讨论认真

查看全部评分

发表于 2011-6-29 22:56:26 | 显示全部楼层 来自: 中国辽宁沈阳
本帖最后由 woaishuijia 于 2011-6-29 23:12 编辑
3 |* J: l& B' a6 R- w- y5 E) p# r( O* W6 Q8 I* w9 g" i7 M7 D2 t
个人理解:在ACAD中,“形心”与“中心”是两个概念。“形心”就是均质实体的“质心”;而几何中心(就是三维小控件的位置)是所选择图形“范围”的中心。形象地说,假如有一个长(立)方体的盒子,其六个面都相应地与WCS坐标平面平行,尺寸和位置刚好能把你选择的一个或多个图元装在里面,这个盒子的形心就是所选择的图元的几何中心。对于单个长方体、球体、圆柱体来说,几何中心与形心是重合的,而对于不规则图形或多个图形的组合很可能就不重合。* d7 @4 u$ ~% l7 r! P
CAD的图形界面并没有提供得到这个盒子(BoundingBox)的直接的命令,但在二次开发方法中提供了。这就是ActiveX的GetBoundingBox方法。当然,只要理解了上面的道理,在图形界面也是可以把它画出来的。

评分

参与人数 1三维币 +5 收起 理由
★新手★ + 5 技术讨论

查看全部评分

 楼主| 发表于 2011-6-30 23:44:22 | 显示全部楼层 来自: 中国山东青岛
多谢斑竹解答。你所说的“边界框”让我茅塞顿开啊!/ B% F# p7 [, c' ~. h
massprop给出的信息里边就有边界框的信息,简单的坐标计算后,那个绿色的几何中心和计算的坐标惊人的一致啊!这个方法虽然不能一部到位,不过还是很好使的。非常感谢!
2 I! ]' x, {8 Z0 [1 g- h* N; m0 r同时,你说的边界框还让我想到了另外一件事:3dmax里面每次选中物体也会出现边界框,我就导入3dmax,哈哈,果然也找到了几何中心。看我附上的图:) t6 |: D9 l4 x1 _! T
我用的是“仅影响轴”和“对齐中心”的命令就能在3dmax里面把轴的原点放置在选中物体的几何中心上。而且这个坐标在世界坐标里面的数据和在cad得里面的很吻合!' F6 f1 ^; m; _+ L6 U/ @
以后看看能不能找到在cad里面编一个程序来实现这个功能。
6 M8 _1 O+ B9 y对了,还发现了一个命令 gtlocation 这个命令能把移动控件对齐到物体几何中心,也就是说cad里面其实隐含了这个几何中心的,可惜就是找不到一个直接的命令来提取。
/ b8 @' J4 m7 r# J+ n. o. x不过斑竹所说“在图形界面也是可以把它画出来的。”这个是什么意思,我有点不理解。是通过作图的方式吗?
QQ截图未命名.png

评分

参与人数 1三维币 +5 收起 理由
★新手★ + 5 积极讨论

查看全部评分

发表于 2011-7-1 13:59:29 | 显示全部楼层 来自: 中国辽宁
本帖最后由 woaishuijia 于 2011-7-1 14:00 编辑
$ ?, F, J$ @( Z3 ?" c7 `- O2 j
是通过作图的方式吗?
2 S5 T7 u' U9 k- J# _; p. g
是的. R: b3 G3 s# C5 K" S% R
以后看看能不能找到在cad里面编一个程序来实现这个功能。
0 H. i7 R4 }, p: ~  V5 \  N
试试下面的代码
  1.     Dim Space As AcadBlock, SS As AcadSelectionSet, E As AcadEntity, E_max As Variant, E_min As Variant, MaxP As Variant, MinP As Variant, _
    6 T1 g( O9 n1 G. G, t: a! V1 Z
  2.         P1(2) As Double, P2(2) As Double, P3(2) As Double, P4(2) As Double, P5(2) As Double, P6(2) As Double, C(2) As Double, I As Integer
    , P( o. x' C- `; |3 d" {* W
  3.     With ThisDrawing+ U+ u, G  w; E. U# R+ ]
  4.         If .ActiveSpace = acModelSpace Then# R7 [7 V/ H4 s: C# q
  5.             Set Space = .ModelSpace& N" M. r: U; p2 p
  6.         Else! {, G' T! ^3 ]' v# R
  7.             Set Space = .PaperSpace
    + R) O$ E& c& e* b4 G4 ~% d  w
  8.         End If8 k/ W" v% R) l0 ~5 f8 _) h+ T
  9.         Set SS = .SelectionSets.Add("SS" )
    ( P+ }" k4 y# Q4 K
  10.         SS.SelectOnScreen! ?$ ~2 y) t# h) X1 H8 }
  11.         If SS.Count > 0 Then
    - h$ u6 d- O4 ]3 L7 v
  12.             SS(0).GetBoundingBox MinP, MaxP0 ~2 r6 d& _  h" g
  13.             If SS.Count > 1 Then6 p- n# y# i! z: T( X4 t" |
  14.                 For I = 1 To SS.Count - 1
    , Z3 _: ~7 p" m2 \) Z
  15.                     SS(I).GetBoundingBox E_min, E_max
    & V) o; F! V+ o! g8 l* V0 C0 m3 l
  16.                     If E_min(0) < MinP(0) Then MinP(0) = E_min(0)
    5 @) k% D2 R6 {  J6 _- g/ ^% x/ S
  17.                     If E_min(1) < MinP(1) Then MinP(1) = E_min(1)
    : Z6 k) v0 d$ l! R( W# s7 _
  18.                     If E_min(2) < MinP(2) Then MinP(2) = E_min(2)5 R. N0 J" k2 L2 z: S/ h* k2 n: x
  19.                     If E_max(0) > MaxP(0) Then MaxP(0) = E_max(0)% U$ F5 G1 L2 T' G* i  _/ _
  20.                     If E_max(1) > MaxP(1) Then MaxP(1) = E_max(1)
    # I" g' a' t% F* P, k  e
  21.                     If E_max(2) > MaxP(2) Then MaxP(2) = E_max(2)
    6 O4 l3 T+ W) B- k+ k; c
  22.                 Next
    9 _( d  n6 M8 l6 E) G, W
  23.             End If, U/ ~4 p- l) o$ P% X) `) Y
  24.             P1(0) = MaxP(0): P1(1) = MinP(1): P1(2) = MinP(2)
    - E/ {! A9 c+ ~+ n$ ^8 i4 ~6 ~: P3 X
  25.             P2(0) = MaxP(0): P2(1) = MaxP(1): P2(2) = MinP(2)' I+ E! h. f; M6 {+ [) T
  26.             P3(0) = MinP(0): P3(1) = MaxP(1): P3(2) = MinP(2)
    : f1 A6 {) O9 j5 U" J7 l
  27.             P4(0) = MinP(0): P4(1) = MaxP(1): P4(2) = MaxP(2)
    # `% z$ q* m7 [/ I) s4 N
  28.             P5(0) = MinP(0): P5(1) = MinP(1): P5(2) = MaxP(2)5 D# \) A: e# U+ ]& \/ W* o+ Q
  29.             P6(0) = MaxP(0): P6(1) = MinP(1): P6(2) = MaxP(2)/ L" y$ N& m! ^: w5 d2 }- u
  30.             C(0) = (MinP(0) + MaxP(0)) / 2: C(1) = (MinP(1) + MaxP(1)) / 2: C(2) = (MinP(2) + MaxP(2)) / 2" ?0 K) R! ]; ^9 m: t
  31.             With Space" N3 ^0 ?, M6 K' A
  32.                 .AddLine MinP, P1
    1 F, |2 F6 v! U9 U. r2 J
  33.                 .AddLine P1, P23 Y7 G- A+ O7 n6 }0 {2 U6 @& u4 ]
  34.                 .AddLine P2, P3! w' f# F" j6 r) X6 X  t
  35.                 .AddLine P3, MinP! M; W! q. Q" b' ~7 u7 B/ E
  36.                 .AddLine MinP, P5
    % b- V: B- J+ s) f5 b, H
  37.                 .AddLine P1, P6/ L# O! L( H& ?* v4 e. ?
  38.                 .AddLine P2, MaxP! D  b: W8 h0 E4 t
  39.                 .AddLine P3, P4
    - F! c; [  {, y
  40.                 .AddLine MaxP, P4
    ! f" i; G! ?) h, u$ S, |
  41.                 .AddLine P4, P5
    ; z+ p) _$ f, Q0 t* G
  42.                 .AddLine P5, P6
    : h1 W$ }2 u" @* d2 }
  43.                 .AddLine P6, MaxP: N+ U3 p8 R3 l! l
  44.                 .AddPoint C
    4 |' E0 i* y+ {; q& f% S0 V; R
  45.             End With% ^  A1 m, a2 y0 \) o& z6 Q8 I
  46.         End If
    4 v' y$ Z$ p; E3 D3 r1 Z- Z
  47.         SS.Delete' V' E2 ~1 B* O# k. @, S7 u
  48.     End With
复制代码

评分

参与人数 1三维币 +10 收起 理由
★新手★ + 10 应助

查看全部评分

发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则


Licensed Copyright © 2016-2020 http://www.3dportal.cn/ All Rights Reserved 京 ICP备13008828号

小黑屋|手机版|Archiver|三维网 ( 京ICP备2023026364号-1 )

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