PLM之家PLMHome-国产软件践行者

[二次开发源码] 【二次开发源码】一种基于点投影,获取投影原始点的方法

[复制链接]

2023-2-28 20:27:29 1112 0

admin 发表于 2023-2-28 20:27:29 |阅读模式

admin 楼主

2023-2-28 20:27:29

请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!

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

x
) D4 R# t5 e" \: d
1 S6 E" _  t+ o$ v6 N

: N$ n( W7 m# q$ b! S0 x9 T【二次开发源码】一种基于点投影,获取投影原始点的方法
' F0 i7 M# \. j5 Z4 _" [6 I0 m5 @% X. r3 p6 m+ j/ r
一直斜边和一个直边的向量,单位向量可以通过dot 获取 夹角9 \+ h+ K8 L' p0 ~  A
然后通过勾股定理,计算得到长边值,最后进行基于点的affine,即可获取斜边向量
0 r8 U) u8 I2 @$ i
! `7 e! g# D; T3 @( c
  1. $ J+ ?, ^' e' G( y3 V
  2. //这里仅仅考虑Z轴方向  H7 Q9 u% l" A' }2 i4 u
  3. void Get_Projection_OrignalPoint(double basePoint[3],double maxZValue,double projectOrignialUnitDir[3], double newOriginalPoint[3])
    ) S) |) G+ M! Z
  4. {- ^7 Q% O3 x. _+ w' C9 x7 X" o
  5.         double dotResult;
    ' j$ B: G( p" O/ d2 ]0 O2 w
  6.         double longDistance;
    $ @( t5 V8 S2 C* `$ j
  7.         double zDir[3] = { 0.0,0.0,1.0 };7 [; r7 D& i& i6 b4 _; y
  8.         //直线距离
    6 a5 Z) O0 F' G. S  f. s" ]
  9.         double deltaProjectDistance = fabs(maxZValue - basePoint[2]);
    ( h# ~9 n' m$ f% ?1 O% {( ?. P

  10. ! M& J+ T9 j) a5 A# _; E
  11.         Echo("斜度垂直直线距离:%.3f maxZValue:%.3f", deltaProjectDistance, maxZValue);: m& {, ]1 ~# I' b
  12. : e$ X& ?' o4 ~- t. p
  13.         if ( EQ_is_eq(deltaProjectDistance,0.0,MINTOL)) //就是最高点 ,直接返回3 l7 a4 M* u& B: v  p
  14.         {
      f1 ?. c& E; ~/ S' P/ \1 I
  15.                 UF_VEC3_copy(basePoint, newOriginalPoint);% L4 `' L: i3 T* i2 ^
  16.                 return;
    3 D5 D# ?$ C0 X4 ]
  17.         }
    0 }/ l, x( F8 ]$ [0 `
  18. & g9 C# B* e, a, l9 j! ^6 F
  19.         //计算夹角,通过单位矢量7 Q7 M; Y9 N0 r  |
  20.         //faceDir 可能反向 - Z1 `1 h, P* J! ?0 {( N
  21.         UF_VEC3_dot(projectOrignialUnitDir, zDir, &dotResult);' D% T# O% H# K  `4 O
  22.         // cos() faceDir.zDir = |FaceDir||ZDir|cos(angle)
    * j8 v, o7 ?& l$ M
  23.         double cosAngle = fabs(dotResult);
    0 T5 T+ ?3 I! p
  24.         : M0 _8 T* }1 t/ o
  25.         //斜边距离; K0 L! U$ ]( a
  26.         if (EQ_is_zero(cosAngle, MINTOL))
    3 A6 |; G# l- Q0 ?+ L( z
  27.         {$ Q# W5 ]" h2 E: E  X& ?1 ?/ _
  28.                 longDistance = deltaProjectDistance;
    1 c4 |% f1 n1 j' |$ W- j: A: ~
  29.         }& n8 x& z: |$ e+ G! K3 }
  30.         else
    ( L  k7 A. k0 x  ]6 m* ~7 q9 s
  31.         {  B" d( Z; i6 h+ {& z) E
  32.                 longDistance = deltaProjectDistance / cosAngle;3 P- G! Q; e9 j0 A* ^
  33.         }5 F- t$ ~5 C3 m% n1 M5 M
  34.           B) t; ]  O$ J3 F8 G6 h7 t
  35.         //这里可能出现方向相反,我们需要进行一次判定; t" ^/ d5 m9 t* m' q, y& ]5 ~0 v8 R

  36. % c' s" h5 V; x% P2 x
  37.         UF_VEC3_affine_comb(basePoint, longDistance, projectOrignialUnitDir, newOriginalPoint);6 g% @5 i! |( W+ x' \% H* N2 s
  38. 1 G; X% g  k5 [: B  I  L) R
  39.         Echo("maxZValue: %f ,newOriginalPoint[2]:%.3f", maxZValue, newOriginalPoint[2]);% r- D0 [8 I2 T& q! T
  40. 9 R2 w4 N2 ^* @0 b: Y8 V
  41.         if (!EQ_is_eq(maxZValue,newOriginalPoint[2],MINTOL))3 s5 w  m* x8 e
  42.         {
    ' A4 }8 A+ r5 ~4 [4 b
  43.                 UF_VEC3_affine_comb(basePoint, -longDistance, projectOrignialUnitDir, newOriginalPoint);
    $ m1 p# ]* A: W
  44.         }
    + p! z& l! p. l5 h  v7 _& H6 X

  45. 4 O$ g  [7 [6 O0 \- q) p7 k

  46. 1 u$ u* A" E, _9 ~
  47.         Echo("cosAngle: %f ,longDistance:%.3f", cosAngle, longDistance);
    . w' Q' A/ [5 a
  48. }
复制代码

9 X6 n8 o: T7 G0 L- g! T+ ?- C5 @# @0 n. p2 h
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 doTeam.tech
回复

使用道具 举报

发表回复

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

返回列表 本版积分规则

  • 发布新帖

  • 在线客服

  • 微信

  • 客户端

  • 返回顶部

  • x
    温馨提示

    本网站(plmhome.com)为PLM之家工业软件学习官网站

    展示的视频材料全部免费,需要高清和特殊技术支持请联系 QQ: 939801026

    PLM之家NX CAM二次开发专题模块培训报名开始啦

    我知道了