PLM之家PLMHome-工业软件践行者

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

[复制链接]

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

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

admin 楼主

2023-2-28 20:27:29

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

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

x

7 F- E/ h& D& z' f4 t) k- L* ], J# h9 g! x$ U

+ t. Z% m" ?. e+ o* Q【二次开发源码】一种基于点投影,获取投影原始点的方法
& c' r7 J! T0 t3 W7 `
" S5 o4 e0 \; l1 Y- v- p, j一直斜边和一个直边的向量,单位向量可以通过dot 获取 夹角! m$ l- o  U, n' e( E3 D  M
然后通过勾股定理,计算得到长边值,最后进行基于点的affine,即可获取斜边向量5 g; A" z2 o  x0 S  P" J
5 [) l' ^* H" j- h# ?0 B0 F% Y
  1. 8 Z3 D' `& ?& v2 q4 p- c" r
  2. //这里仅仅考虑Z轴方向/ J  {" Y* f- B- u% {
  3. void Get_Projection_OrignalPoint(double basePoint[3],double maxZValue,double projectOrignialUnitDir[3], double newOriginalPoint[3])
    & P6 z, G2 Q! g1 b4 v
  4. {
    2 }2 i2 X% F& |
  5.         double dotResult;, ?9 K, ~3 E+ P% N( |. _' g
  6.         double longDistance;
    , d) r! n7 ^; j; B% t
  7.         double zDir[3] = { 0.0,0.0,1.0 };5 w5 L4 \0 n2 U& R6 T
  8.         //直线距离0 w2 K! T" L  x& n! e
  9.         double deltaProjectDistance = fabs(maxZValue - basePoint[2]);
    ( w. @9 _7 q7 }- C. b
  10. - V$ X1 P9 X& Z+ G
  11.         Echo("斜度垂直直线距离:%.3f maxZValue:%.3f", deltaProjectDistance, maxZValue);) a" e4 J) E7 p' d
  12. - P; Y/ x* {3 o5 U4 r; c
  13.         if ( EQ_is_eq(deltaProjectDistance,0.0,MINTOL)) //就是最高点 ,直接返回
    * I! d. H/ k$ T/ X) Z
  14.         {) q8 f$ r4 X1 Q; J! Y
  15.                 UF_VEC3_copy(basePoint, newOriginalPoint);
    ! ~0 x7 t( \" Z* j- A' S$ O  `6 |
  16.                 return;/ m% Y: @: u. X4 o
  17.         }
    0 D) u3 X5 V# a" d: ?7 r4 V

  18. 9 \5 [$ x( Y% `  T! w
  19.         //计算夹角,通过单位矢量* a; @; i$ V; m: Q8 w9 M
  20.         //faceDir 可能反向
    & b) N% }" H2 T( y/ W# \) B- F6 F
  21.         UF_VEC3_dot(projectOrignialUnitDir, zDir, &dotResult);- w6 T) E4 g. u# y' t! r
  22.         // cos() faceDir.zDir = |FaceDir||ZDir|cos(angle)
      d9 B" e) ]4 D4 c
  23.         double cosAngle = fabs(dotResult);
    - {" a) R2 H8 y  p4 m
  24.        
    2 T% [$ k3 m. D3 b7 u. v
  25.         //斜边距离( H! p! h4 D: b9 P, H* s% f# Q
  26.         if (EQ_is_zero(cosAngle, MINTOL))
    8 G: T' P! o) G5 {
  27.         {: R4 B$ A* K. X4 p* j7 q* Z
  28.                 longDistance = deltaProjectDistance;) H  `2 F) q3 V
  29.         }$ z. J# j7 U' a2 A
  30.         else! Z1 A! A! r6 D0 i
  31.         {+ j  Y; E# H" @$ H" u0 F/ z
  32.                 longDistance = deltaProjectDistance / cosAngle;8 Q; M. b. F3 f* |* t
  33.         }
    * S7 O; U' Q9 Z
  34.         ) I1 {9 }: z5 W3 t
  35.         //这里可能出现方向相反,我们需要进行一次判定
    . r5 G  C  c& K. j! S8 K

  36. ; v- P6 F( z, @4 o% Z; N! H6 X$ t
  37.         UF_VEC3_affine_comb(basePoint, longDistance, projectOrignialUnitDir, newOriginalPoint);
    3 ~) P$ E  L" K6 w; V+ [# A8 q
  38. $ W4 ]# L! l& ^5 e/ f$ P
  39.         Echo("maxZValue: %f ,newOriginalPoint[2]:%.3f", maxZValue, newOriginalPoint[2]);
    . g( ?$ Y& S/ X" R

  40. # x' W, P3 V6 G9 N% ^
  41.         if (!EQ_is_eq(maxZValue,newOriginalPoint[2],MINTOL))+ _9 s$ `1 U" ^8 ?
  42.         {
    + s, u; n1 o# S( I3 U
  43.                 UF_VEC3_affine_comb(basePoint, -longDistance, projectOrignialUnitDir, newOriginalPoint);" K, L) V) K& A; q0 T! m
  44.         }3 H2 R- q" t$ g) |8 Q4 \
  45.   T) R9 L* O# l3 i

  46. ) l2 x, y6 v1 S) V8 w1 b
  47.         Echo("cosAngle: %f ,longDistance:%.3f", cosAngle, longDistance);. @8 @  R# B) Z  m) z9 F! v7 w
  48. }
复制代码

  Y- ~& C! e9 R
, T: B: P# d  `7 }* y  d
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了