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

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

[复制链接]

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

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

admin 楼主

2023-2-28 20:27:29

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

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

x
9 i  B, b! j1 v5 C0 l
4 z) M( [2 T( B; P: t0 O

5 I6 [4 q0 H1 W' o( U【二次开发源码】一种基于点投影,获取投影原始点的方法6 A7 |; W2 B8 e, B; v
7 R0 g) {" f3 E0 T/ W
一直斜边和一个直边的向量,单位向量可以通过dot 获取 夹角
2 ~+ T% Y4 d  y9 V5 c& [然后通过勾股定理,计算得到长边值,最后进行基于点的affine,即可获取斜边向量
6 ?2 b. i- ?) K3 ~- ^1 _
) _* D, P2 |# v1 e1 d

  1. 4 m8 ?0 p2 K. w9 O# p
  2. //这里仅仅考虑Z轴方向1 N8 P- _0 w* W% _- c) \
  3. void Get_Projection_OrignalPoint(double basePoint[3],double maxZValue,double projectOrignialUnitDir[3], double newOriginalPoint[3]): J# ?, m( X5 l2 i# w: [; K
  4. {
    0 m* L, I" D3 t- V) u- o
  5.         double dotResult;
    & v1 t- F0 I2 V; t1 o- X
  6.         double longDistance;
    ; y$ i+ G! I9 u- J1 g/ P
  7.         double zDir[3] = { 0.0,0.0,1.0 };
    ; e* @5 f6 @1 o7 i0 y5 o5 z- r. u
  8.         //直线距离
    5 T+ S& D5 B. V# W5 e% ^
  9.         double deltaProjectDistance = fabs(maxZValue - basePoint[2]);" t  r& ~+ }- D1 C! r3 p

  10. , e7 k& Z3 @4 d+ _
  11.         Echo("斜度垂直直线距离:%.3f maxZValue:%.3f", deltaProjectDistance, maxZValue);
    1 V4 S8 V4 w- ^9 F( D/ U' L

  12. ! s& H: k% ^6 d3 Y# V0 o3 k
  13.         if ( EQ_is_eq(deltaProjectDistance,0.0,MINTOL)) //就是最高点 ,直接返回
    # B) ~% {) Z  r0 `5 A9 _
  14.         {
    5 P! }2 \$ f  E1 C5 i
  15.                 UF_VEC3_copy(basePoint, newOriginalPoint);  u% ?# h+ O3 Q, y# l+ z  O
  16.                 return;) h* |& Z9 W- I4 s4 M) h
  17.         }
    , E0 k9 Z% u8 O  m: r0 b
  18. 8 G5 q7 e" f" G! l. @4 _9 S1 P& P
  19.         //计算夹角,通过单位矢量) K0 {$ d5 Z' n7 A
  20.         //faceDir 可能反向 * X: y7 m+ Z2 w5 r4 n9 r7 z
  21.         UF_VEC3_dot(projectOrignialUnitDir, zDir, &dotResult);2 X4 y& t. b! Q) e$ i& U
  22.         // cos() faceDir.zDir = |FaceDir||ZDir|cos(angle) 6 |$ S5 Z! B& c! h1 U+ P$ }' {
  23.         double cosAngle = fabs(dotResult);3 S) e; X* P) v. [2 k9 `% ~
  24.        
    0 B$ G: j7 F# y) [& _
  25.         //斜边距离0 N( R- O7 |# m" U2 X& h
  26.         if (EQ_is_zero(cosAngle, MINTOL)); C0 t, a/ c$ _# B* g5 c4 G. ^
  27.         {5 H/ e- i, E7 v1 `  b" i) |
  28.                 longDistance = deltaProjectDistance;
    0 h% r$ I9 |4 c4 N3 J
  29.         }0 x% o# ~/ [' n( s4 J7 i# Y7 x
  30.         else
    $ R3 m3 K! z8 K  y3 C
  31.         {8 j8 O! U- e; k# u" T4 M4 \
  32.                 longDistance = deltaProjectDistance / cosAngle;, |* U8 T1 D; Q2 j/ h7 S8 d& K' b2 P# j' s
  33.         }
    1 S5 X& A% [; D2 |' }$ F# L1 g
  34.         5 G5 a; h7 O; V9 u) Y/ n) `
  35.         //这里可能出现方向相反,我们需要进行一次判定3 ^; m: p: F1 h
  36. ; l; e0 v. N/ Y2 x" a2 m) t& w
  37.         UF_VEC3_affine_comb(basePoint, longDistance, projectOrignialUnitDir, newOriginalPoint);
    ; p4 M4 i) r/ P3 M' ]
  38. 8 T# u6 @5 g# C) _0 }1 |
  39.         Echo("maxZValue: %f ,newOriginalPoint[2]:%.3f", maxZValue, newOriginalPoint[2]);( V7 t0 H8 n+ O+ q" f! b8 ^
  40. 1 |' S2 P- ^+ b% M: [
  41.         if (!EQ_is_eq(maxZValue,newOriginalPoint[2],MINTOL))3 w/ a1 O- X0 t* x8 Q- }: Q" \8 M
  42.         {
    1 r5 W7 Y% M- A7 Y( l
  43.                 UF_VEC3_affine_comb(basePoint, -longDistance, projectOrignialUnitDir, newOriginalPoint);& L2 I7 q! D+ h! V/ A% u# x! x* S
  44.         }3 X; o( C% l7 m: A; U

  45. " n1 `  |0 _8 B4 c' u* m2 T; A

  46. 5 ~7 I2 t0 d4 _; ?4 J6 G6 f5 ^: I
  47.         Echo("cosAngle: %f ,longDistance:%.3f", cosAngle, longDistance);/ G2 _' ~3 L6 G0 F
  48. }
复制代码

# S! V9 y7 c" m4 k! [  ~
) E3 h9 F  w+ U$ r* [1 I
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了