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

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

[复制链接]

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

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

admin 楼主

2023-2-28 20:27:29

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

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

x

, A' M+ a7 f  f  x) R, m( J- ^4 Z8 g5 c( q# ?
: }" T* y: _7 m/ U: E0 b# M2 Z/ Y& ^
【二次开发源码】一种基于点投影,获取投影原始点的方法
! u- `- a4 I& O' d2 Y1 d: v1 ~& B3 ?$ _0 i
一直斜边和一个直边的向量,单位向量可以通过dot 获取 夹角; C+ d9 ~1 z# ~) [8 K/ _7 I
然后通过勾股定理,计算得到长边值,最后进行基于点的affine,即可获取斜边向量
  Z0 y8 Q- o6 a& }+ G6 @+ s0 I
- x  s# Z: Y0 r* R% x2 f: u
  1.   F6 Q9 S; L! Z
  2. //这里仅仅考虑Z轴方向3 F; i. E* z0 O* ~+ Z
  3. void Get_Projection_OrignalPoint(double basePoint[3],double maxZValue,double projectOrignialUnitDir[3], double newOriginalPoint[3])$ L! }( _7 F4 R5 p. Y: n
  4. {$ }: q0 R1 ^0 P/ I% Y, Y+ C
  5.         double dotResult;1 L- _: n: b6 V2 G
  6.         double longDistance;
    1 W% ]( \0 |* x3 z- b( F/ Z" h
  7.         double zDir[3] = { 0.0,0.0,1.0 };
    6 D0 q4 o2 ]# o, m& Y. h
  8.         //直线距离9 b9 z+ W2 Q& o4 R7 o, N
  9.         double deltaProjectDistance = fabs(maxZValue - basePoint[2]);) d4 z9 E1 E; h' u5 [9 X
  10. # ?$ B; A* U6 I9 ]. D- m+ g5 L
  11.         Echo("斜度垂直直线距离:%.3f maxZValue:%.3f", deltaProjectDistance, maxZValue);
    7 Y$ r' a% V; G; J

  12. # K, K/ |; L. P
  13.         if ( EQ_is_eq(deltaProjectDistance,0.0,MINTOL)) //就是最高点 ,直接返回
    8 R% M6 }8 }* u3 M  t
  14.         {
    1 k2 M8 e3 i! k3 j! k( B' i
  15.                 UF_VEC3_copy(basePoint, newOriginalPoint);
    ( X+ ^: Y6 ~& h) _& T9 N
  16.                 return;6 a% m5 C# t% O
  17.         }
    " Y+ @3 H& n" g" C( x+ A) h& h! n
  18. . {$ y: k; M. }1 m
  19.         //计算夹角,通过单位矢量5 H$ G" M2 D* ^4 T* Z2 y5 q0 L
  20.         //faceDir 可能反向
    % c2 h, W6 ]$ K' J1 M
  21.         UF_VEC3_dot(projectOrignialUnitDir, zDir, &dotResult);
    + g) ^7 ]- M8 I
  22.         // cos() faceDir.zDir = |FaceDir||ZDir|cos(angle) 8 d# e- U; u: G; R" ~
  23.         double cosAngle = fabs(dotResult);, _% y: j" r3 R  V4 t
  24.         6 ~8 x8 z" I2 c
  25.         //斜边距离7 k: H3 e8 ^- O: c  g
  26.         if (EQ_is_zero(cosAngle, MINTOL))
    7 b7 P$ l" W" `" y1 u* J1 V
  27.         {. t2 e. H) p7 d$ U! \% G
  28.                 longDistance = deltaProjectDistance;# O5 V  k: ^' B* j0 ?
  29.         }
    $ v, W8 _: w# N4 e6 e1 i
  30.         else
    . q) _& F8 Q' ]/ h7 B
  31.         {" G" e" l: Y7 a* {  V4 {
  32.                 longDistance = deltaProjectDistance / cosAngle;, u- w. H3 n! d4 f6 _0 L- x2 b  M
  33.         }
    ' _; I$ f+ D! s! j
  34.        
    + T6 S- ^, R. x, K, O
  35.         //这里可能出现方向相反,我们需要进行一次判定
    / Q6 r* z9 g+ G5 C' _

  36. * ~; M+ K) q. [! y! Z! o
  37.         UF_VEC3_affine_comb(basePoint, longDistance, projectOrignialUnitDir, newOriginalPoint);) G/ M* x. x( {; M( _
  38. 5 V+ X. l. y$ U( j& V
  39.         Echo("maxZValue: %f ,newOriginalPoint[2]:%.3f", maxZValue, newOriginalPoint[2]);' i2 p! D+ p, p
  40. 9 |3 ^6 r9 [9 o9 e# R
  41.         if (!EQ_is_eq(maxZValue,newOriginalPoint[2],MINTOL))5 {9 U: U- U, X+ x' G9 Z
  42.         {
    ; T4 ?9 t" }& `0 ~
  43.                 UF_VEC3_affine_comb(basePoint, -longDistance, projectOrignialUnitDir, newOriginalPoint);
    * u7 A- `- f: H1 D; |$ r/ X$ t) N
  44.         }
    % Q% L( D. B9 w) a3 X

  45. 1 r1 C* m8 e# u( ]; F  A+ b7 s

  46. 7 @% O4 g3 H7 S
  47.         Echo("cosAngle: %f ,longDistance:%.3f", cosAngle, longDistance);- y& Q4 Y+ ]9 k+ a* ]* ]
  48. }
复制代码
9 n7 c) x* e) U3 W' W) g6 `

& i2 E3 v" N3 w' ^
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了