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

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

[复制链接]

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

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

admin 楼主

2023-2-28 20:27:29

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

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

x
( S& |! N. @, B- P+ B
3 w" y( d  [; ^, \3 r2 {/ d

( c* K! b9 {" ^/ T' v【二次开发源码】一种基于点投影,获取投影原始点的方法4 h" [" a9 A3 z- f
/ h' X  m( h7 m" j  p9 h
一直斜边和一个直边的向量,单位向量可以通过dot 获取 夹角
) ?0 g' m! q$ O+ M5 L$ z) a然后通过勾股定理,计算得到长边值,最后进行基于点的affine,即可获取斜边向量! o4 h' l+ E8 e
0 K* y8 s" `* l5 ^" m# z" X6 {
  1. % v8 J" w/ I$ d: b& P' ^# j+ I8 a
  2. //这里仅仅考虑Z轴方向4 J% C' q& }; S. D, C9 o
  3. void Get_Projection_OrignalPoint(double basePoint[3],double maxZValue,double projectOrignialUnitDir[3], double newOriginalPoint[3])5 ^4 _; h( c3 X& M
  4. {
    ; N* L6 g3 n$ j4 d$ F/ u
  5.         double dotResult;4 o1 D% I9 t' ^" ~
  6.         double longDistance;
    , ]) |! B7 N- ^$ r3 x
  7.         double zDir[3] = { 0.0,0.0,1.0 };! l( G- \0 d6 a* f; q
  8.         //直线距离3 p, F8 |2 Q, e8 {  D0 ~3 U
  9.         double deltaProjectDistance = fabs(maxZValue - basePoint[2]);1 K+ I1 ]. `* W  _

  10. ( u# w$ i! ^6 h5 u- {
  11.         Echo("斜度垂直直线距离:%.3f maxZValue:%.3f", deltaProjectDistance, maxZValue);/ w* i, ?. e5 t: C

  12.   Z: L7 G8 L' M( ?6 ]1 x6 \( H
  13.         if ( EQ_is_eq(deltaProjectDistance,0.0,MINTOL)) //就是最高点 ,直接返回4 s7 H2 L$ m  S0 r" D
  14.         {
    , `4 Q& s5 S+ `# I* N. I
  15.                 UF_VEC3_copy(basePoint, newOriginalPoint);
    3 q8 ^/ C! v7 Z& I: v! |
  16.                 return;8 n6 C/ J& d( z- a& [
  17.         }
    / J3 l: x+ n8 U2 B

  18. * W) h# n9 m) q3 Y, W
  19.         //计算夹角,通过单位矢量
    $ [, m: }. x7 G" N3 ?/ X
  20.         //faceDir 可能反向
    9 ], [7 ^* l4 {9 w6 \
  21.         UF_VEC3_dot(projectOrignialUnitDir, zDir, &dotResult);
    4 V3 |6 y) m. z9 x& [* d
  22.         // cos() faceDir.zDir = |FaceDir||ZDir|cos(angle)
    : o9 Y, O, J$ ?/ o, _% M
  23.         double cosAngle = fabs(dotResult);
    4 J1 k3 m* R' Q8 q; {  F- g3 W. l, ?
  24.         ( ^% f. Q1 B) D8 b" J- j
  25.         //斜边距离
    1 i) M$ P0 I; m- {. G1 s" j# u5 n
  26.         if (EQ_is_zero(cosAngle, MINTOL))
    ( Z! @5 S# _: k& e7 f
  27.         {$ I% J0 _4 `! ~8 Z$ D" ?) M/ }
  28.                 longDistance = deltaProjectDistance;0 n) I7 t/ k* p
  29.         }5 t0 h/ T# h& P
  30.         else' T+ ^$ D/ ^/ I
  31.         {
    - E- K( Q8 u6 c- f( f$ d
  32.                 longDistance = deltaProjectDistance / cosAngle;
    : i5 g* l9 x4 u" q) f/ `
  33.         }
    + {% A! {# M" O
  34.         $ n+ _% S7 e4 k6 Z: `7 u
  35.         //这里可能出现方向相反,我们需要进行一次判定+ U0 A" N+ F) B+ v4 c
  36. . B$ ~* H0 t' e) x- G
  37.         UF_VEC3_affine_comb(basePoint, longDistance, projectOrignialUnitDir, newOriginalPoint);: p4 u1 w0 z2 O6 e3 F$ u

  38. , d+ n- M# e; \' d3 x. E% i
  39.         Echo("maxZValue: %f ,newOriginalPoint[2]:%.3f", maxZValue, newOriginalPoint[2]);
    6 L* {* t/ B4 F: T9 ^; x
  40. 0 p' D- N% W% M0 y! {5 \
  41.         if (!EQ_is_eq(maxZValue,newOriginalPoint[2],MINTOL))
      G- Y0 B& j, z$ O% {
  42.         {5 Z3 @  f( H; D0 `$ o
  43.                 UF_VEC3_affine_comb(basePoint, -longDistance, projectOrignialUnitDir, newOriginalPoint);
    " z" Y& V# S& q
  44.         }8 ~  A. h5 e. g3 u7 z  s) w# z, N

  45. & ^2 v0 v, B6 O. \5 [9 s  j
  46. 0 A9 }0 x0 _0 b% F# U
  47.         Echo("cosAngle: %f ,longDistance:%.3f", cosAngle, longDistance);
    $ M% ]; u" X4 Z* O" T
  48. }
复制代码
- L# n5 i3 i- _

& v/ Q* o) ]& v
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了