PLM之家PLMHome-工业软件与AI结合践行者

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

[复制链接]

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

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

admin 楼主

2023-2-28 20:27:29

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

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

x

; E, n7 s# D) r' a) v/ D
/ t9 p& w0 u6 v" h& g2 [, \# j5 |  A7 @
【二次开发源码】一种基于点投影,获取投影原始点的方法) j, Z/ R: ^% e' Y1 b4 f) L

: t4 t) ^3 u( L0 E! R* P/ j一直斜边和一个直边的向量,单位向量可以通过dot 获取 夹角
* S. _" }+ ~$ ~$ i$ ~然后通过勾股定理,计算得到长边值,最后进行基于点的affine,即可获取斜边向量% r9 G9 |) G5 M' q
7 B1 ~: _: f* C& S

  1. % [3 |; ~  p; D; C: b! c& G9 E
  2. //这里仅仅考虑Z轴方向8 E7 Y0 ~- s1 ^; u7 e
  3. void Get_Projection_OrignalPoint(double basePoint[3],double maxZValue,double projectOrignialUnitDir[3], double newOriginalPoint[3])* G8 d6 S+ K$ Z2 g& i
  4. {2 v8 K/ r0 M; i+ Z
  5.         double dotResult;3 D5 p2 E& r9 }; `. i- ?6 A
  6.         double longDistance;! N0 X9 c" S3 |5 B% B9 x7 S
  7.         double zDir[3] = { 0.0,0.0,1.0 };
    & E; E# x+ t" F, P
  8.         //直线距离3 [; g* [- J: T3 u1 d5 `  ~( R
  9.         double deltaProjectDistance = fabs(maxZValue - basePoint[2]);2 ]+ Q" _+ Y4 H9 O( w; }6 f8 ]
  10. # V  G' k  L! T* F& U: d6 Y6 f
  11.         Echo("斜度垂直直线距离:%.3f maxZValue:%.3f", deltaProjectDistance, maxZValue);
    ' Y" o4 C$ L4 a* c

  12. ) s% f/ |( i$ J4 {1 @
  13.         if ( EQ_is_eq(deltaProjectDistance,0.0,MINTOL)) //就是最高点 ,直接返回; M* a$ i  Z6 l; O5 ^/ }/ a3 h
  14.         {
    , N" J* O$ K- Z2 e) X1 G, O* c! t
  15.                 UF_VEC3_copy(basePoint, newOriginalPoint);6 s& i0 \3 h# h, q* h" x' u& A# Z. d. B
  16.                 return;
    ) b; U# h0 N9 F: O9 g
  17.         }
    - z9 V% R  x$ I  f4 d- o6 H( U8 G! p
  18. + w; Z" G0 T! b3 h* ?
  19.         //计算夹角,通过单位矢量
    " F9 `8 O7 |# e, n! O/ q) ~& u
  20.         //faceDir 可能反向 * X1 E8 |2 j$ H6 v7 E
  21.         UF_VEC3_dot(projectOrignialUnitDir, zDir, &dotResult);* |5 b9 f4 U/ U8 M6 G6 p2 ~4 X3 C$ a
  22.         // cos() faceDir.zDir = |FaceDir||ZDir|cos(angle)
    6 X5 O7 u! T( _, O0 A4 k6 h% ~) V
  23.         double cosAngle = fabs(dotResult);' o4 z: s3 Z5 t0 w
  24.        
    4 j) b8 R  G6 R/ E
  25.         //斜边距离
    / ~0 z" |$ R- S; [
  26.         if (EQ_is_zero(cosAngle, MINTOL)); l$ a, a9 ~" R7 W  q1 z
  27.         {
    0 k9 U5 P7 L; j' t. _
  28.                 longDistance = deltaProjectDistance;4 k" M' [7 x& v# |4 K
  29.         }# L, t4 J% `/ R, O9 y- O
  30.         else* H) b  O2 X% B# V
  31.         {# D5 `% x, t6 L" ^. i* c
  32.                 longDistance = deltaProjectDistance / cosAngle;: Z$ r8 R+ v) w# F4 t2 C3 x; I$ ]
  33.         }
      S; l2 C+ z0 ^( a
  34.         1 ~) D; K, z6 S
  35.         //这里可能出现方向相反,我们需要进行一次判定' y$ _$ g- z4 P# d) n6 c- t/ K
  36. # B# B! A5 Y. o- |- r
  37.         UF_VEC3_affine_comb(basePoint, longDistance, projectOrignialUnitDir, newOriginalPoint);
    ) n. `8 U4 p- [$ m* H
  38. ' G: ]8 ?- z9 e' x2 ~# q
  39.         Echo("maxZValue: %f ,newOriginalPoint[2]:%.3f", maxZValue, newOriginalPoint[2]);9 u- U* @9 {0 P5 M% i: O

  40. 3 d) A9 d- I/ g4 M8 |8 ^1 i
  41.         if (!EQ_is_eq(maxZValue,newOriginalPoint[2],MINTOL))
    2 G  L3 O9 D( D0 ~, N2 ?# t
  42.         {# f5 ~  A7 \6 l4 |; q' y
  43.                 UF_VEC3_affine_comb(basePoint, -longDistance, projectOrignialUnitDir, newOriginalPoint);
    5 f; i9 R2 g* F
  44.         }
    - Z% T/ Y2 C- N
  45. & c2 o: m/ ]0 Q  A/ \
  46. ; s; n7 |# |5 Z0 Q* x
  47.         Echo("cosAngle: %f ,longDistance:%.3f", cosAngle, longDistance);
    $ X7 R- y& l  y9 ]4 U* O
  48. }
复制代码
9 y! s' Y5 Z. v* S) h
6 [0 m, a; Y* g$ {# R, ^9 n: |
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了