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

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

[复制链接]

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

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

admin 楼主

2023-2-28 20:27:29

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

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

x
: N) u2 ~3 L) `. O$ a( r: P0 B8 O
) d7 E2 v8 m: }, ?. J& r
, L; T, f: z* l
【二次开发源码】一种基于点投影,获取投影原始点的方法
! }- ^( v- c+ }1 B+ I0 E5 F8 A% F) q* U
一直斜边和一个直边的向量,单位向量可以通过dot 获取 夹角6 ^) a+ D6 k4 X6 o
然后通过勾股定理,计算得到长边值,最后进行基于点的affine,即可获取斜边向量
' o; P0 Q+ J$ X; r7 t1 l. Q  f7 h* k) e. }/ S# [
  1. / Y: l) S1 }8 x
  2. //这里仅仅考虑Z轴方向
    5 @  d# {8 h! K
  3. void Get_Projection_OrignalPoint(double basePoint[3],double maxZValue,double projectOrignialUnitDir[3], double newOriginalPoint[3]); V, X  X0 U' J4 _/ V) F$ c- }
  4. {4 V) V/ n9 D1 T1 k
  5.         double dotResult;5 q; k4 S. R* H
  6.         double longDistance;, T1 G0 n4 J+ T4 H/ t  [- @4 U
  7.         double zDir[3] = { 0.0,0.0,1.0 };
    % c3 ]2 ]1 J( r  P) e3 m7 }
  8.         //直线距离
    - i' R$ q" Z& G$ v
  9.         double deltaProjectDistance = fabs(maxZValue - basePoint[2]);( I( [% A* A1 U% F6 J% U7 k
  10. : q% A$ c: j9 G
  11.         Echo("斜度垂直直线距离:%.3f maxZValue:%.3f", deltaProjectDistance, maxZValue);0 s- a# @6 k  h" Z$ F+ O% e2 w

  12.   S: o: W3 y7 p- A- {
  13.         if ( EQ_is_eq(deltaProjectDistance,0.0,MINTOL)) //就是最高点 ,直接返回1 P- |; M' k/ X& {0 K+ h5 j5 ]
  14.         {
    + d6 p$ J& ^" T' n& e7 _
  15.                 UF_VEC3_copy(basePoint, newOriginalPoint);* z; ]( V& B5 E/ g% Y/ ^5 A, b7 d
  16.                 return;6 `( {6 b, u, ]
  17.         }- F1 z3 h& f: j5 e8 ]2 I, g! s
  18. 9 I, z4 w1 t3 c0 p. v8 g+ I
  19.         //计算夹角,通过单位矢量
      W$ s8 j* w+ ?9 S
  20.         //faceDir 可能反向
    * i3 P7 H9 ]) K2 ]( h+ u5 g# z
  21.         UF_VEC3_dot(projectOrignialUnitDir, zDir, &dotResult);8 h, S& N. \2 Q
  22.         // cos() faceDir.zDir = |FaceDir||ZDir|cos(angle) # g( n, v4 q/ d
  23.         double cosAngle = fabs(dotResult);
    3 q0 j% m/ A! ?
  24.        
    + T! K6 L6 G0 E; _: `$ F4 c) D
  25.         //斜边距离2 \4 z) T$ g( o3 p: M& `+ u
  26.         if (EQ_is_zero(cosAngle, MINTOL))  ]  t& z5 @; _/ [# F! e# Q4 i
  27.         {
    & S0 |$ N% W7 b( B' v' m( M, _9 ^2 r
  28.                 longDistance = deltaProjectDistance;- Y% w2 M; ]0 P# F- }2 U$ E5 u
  29.         }! e# `0 O* ^2 [/ J% v4 a
  30.         else
    " C7 w! L/ U/ o
  31.         {
    9 E' R3 S. Y. }
  32.                 longDistance = deltaProjectDistance / cosAngle;
    & E' Q* h$ @* _' j: U
  33.         }4 `$ B$ R- e4 ^) v
  34.         0 a5 h' i3 m# b* F' `
  35.         //这里可能出现方向相反,我们需要进行一次判定' H4 @7 E9 o8 G, w* p) R
  36. 6 U: n- `) A  s+ W0 S. X
  37.         UF_VEC3_affine_comb(basePoint, longDistance, projectOrignialUnitDir, newOriginalPoint);+ w* S1 `8 \  C

  38. 4 ]+ X& L# Q4 f1 k0 x; Q
  39.         Echo("maxZValue: %f ,newOriginalPoint[2]:%.3f", maxZValue, newOriginalPoint[2]);
    - _8 Y2 {; l( s! c" G. j" J
  40. * C" q, O/ j; M
  41.         if (!EQ_is_eq(maxZValue,newOriginalPoint[2],MINTOL))* b8 n; k, a# u. U8 w7 U2 C' n6 D
  42.         {. i" J+ s1 A: Z. W5 `3 E
  43.                 UF_VEC3_affine_comb(basePoint, -longDistance, projectOrignialUnitDir, newOriginalPoint);
    7 c& ^" |, M, X* K7 S4 W3 `- Z8 m/ w
  44.         }
    ! M8 S% W9 |: R% T8 A
  45. ! N4 n  @& S# R. S' B

  46. ! U) S( M' r% w% P3 ^
  47.         Echo("cosAngle: %f ,longDistance:%.3f", cosAngle, longDistance);
    + e6 _) ^  H( x5 i) {
  48. }
复制代码
+ G2 M7 @' k& P. i. E& n
( N2 e6 i! Y4 J% z2 [
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.diantuankj.com/ doTeam.tech
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 注册

返回列表 本版积分规则

  • 发布新帖

  • 在线客服

  • 微信

  • 客户端

  • 返回顶部

  • x
    温馨提示

    本网站(plmhome.com)为PLM之家工业软件学习官网站

    展示的视频材料全部免费,需要高清和特殊技术支持请联系 QQ: 939801026

    PLM之家NX CAM二次开发专题模块培训报名开始啦

    我知道了