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

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

[复制链接]

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

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

admin 楼主

2023-2-28 20:27:29

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

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

x
5 e; h3 L1 W- {# u: u% P
" N, ~8 l8 a/ @! ?

  I5 r% C/ j8 E5 m5 m# ?* s! K【二次开发源码】一种基于点投影,获取投影原始点的方法5 @: T9 _( B/ t3 x1 Z
5 Y& P8 {  R4 y6 p
一直斜边和一个直边的向量,单位向量可以通过dot 获取 夹角) r3 G: n$ f; L. E7 U& ^) L5 i
然后通过勾股定理,计算得到长边值,最后进行基于点的affine,即可获取斜边向量! O* m, v0 _) \

; `& Y+ ]$ ?8 v+ c/ n3 T) w
  1. 7 [) l2 m" T; y& S
  2. //这里仅仅考虑Z轴方向
    1 r7 e' ?& q& ~0 k, E: R( _$ D  P
  3. void Get_Projection_OrignalPoint(double basePoint[3],double maxZValue,double projectOrignialUnitDir[3], double newOriginalPoint[3])
    ! T! [- u& E' b. G0 K$ \' t- K
  4. {
    % N4 g$ p- x7 G2 W- b" z
  5.         double dotResult;
    " [8 N, p' w% ]7 k8 l+ G  z% t
  6.         double longDistance;4 }. P0 a  p8 X; c
  7.         double zDir[3] = { 0.0,0.0,1.0 };
    ) w8 A8 w$ J0 I1 O0 G8 ^1 T) t
  8.         //直线距离% V- Q4 u2 a" S8 n: Q- `0 w
  9.         double deltaProjectDistance = fabs(maxZValue - basePoint[2]);
    ) @/ i4 }- k4 f* }+ I! ^

  10. + o' ^$ S% v0 W) j1 U4 Z
  11.         Echo("斜度垂直直线距离:%.3f maxZValue:%.3f", deltaProjectDistance, maxZValue);
    3 h9 r  s9 D9 b. f# j- t, @

  12. 9 q/ z! v) {9 Z  D  b1 V1 L
  13.         if ( EQ_is_eq(deltaProjectDistance,0.0,MINTOL)) //就是最高点 ,直接返回& E; [9 f/ y. Q
  14.         {
    2 a! r: A( ?& M* g2 S, I! r
  15.                 UF_VEC3_copy(basePoint, newOriginalPoint);
    4 z; N. K' b7 g; J, [. }4 n
  16.                 return;
    * o# z: m$ z5 G: a) v1 X
  17.         }
    ' m4 v8 J5 x0 x' G' C) o
  18. " f4 ?5 Q7 |8 `4 @
  19.         //计算夹角,通过单位矢量% ~7 t  ?; b) v9 S* S3 g1 x
  20.         //faceDir 可能反向 " X6 c5 p& V5 Q
  21.         UF_VEC3_dot(projectOrignialUnitDir, zDir, &dotResult);. |4 Q' d, u( S. X6 h& b
  22.         // cos() faceDir.zDir = |FaceDir||ZDir|cos(angle)
    6 C) m6 H1 `' x8 K  t0 G$ e
  23.         double cosAngle = fabs(dotResult);
    6 ~3 r6 ^5 ~/ \) I! \
  24.         8 l6 S' ^, Y: H, k5 B2 ]
  25.         //斜边距离
    4 |% r  i- y3 u: Z! x4 Y! J/ B
  26.         if (EQ_is_zero(cosAngle, MINTOL))' r( J* }" \; i7 X) t5 a  l. |5 m, R" a
  27.         {
    ; \5 O+ {7 ?9 a# V. d4 `, s0 p
  28.                 longDistance = deltaProjectDistance;
    9 J+ d6 m. u( K6 v* w5 I
  29.         }1 S7 @( J' m2 a# V3 F
  30.         else
    / y! {" Q0 p2 ]
  31.         {
    1 \' H4 W. U$ I9 F
  32.                 longDistance = deltaProjectDistance / cosAngle;
    . |* k( P+ L8 @8 |: Z' i
  33.         }
    ' d" C/ ?& w/ T+ c! u' E
  34.        
      h" e$ L& i1 `, L' k7 N
  35.         //这里可能出现方向相反,我们需要进行一次判定
    ( ~" L1 P3 T, r8 n$ k; K7 h* i
  36. / a( Y* j1 C+ d, l
  37.         UF_VEC3_affine_comb(basePoint, longDistance, projectOrignialUnitDir, newOriginalPoint);! Z4 L8 {& ?2 F5 p
  38. 3 x5 v4 H- }& P* h8 L. T! }! ]! K
  39.         Echo("maxZValue: %f ,newOriginalPoint[2]:%.3f", maxZValue, newOriginalPoint[2]);
    7 U  C. L, {+ f1 Y, [

  40. & y% \8 @/ v+ d2 K1 z* Z
  41.         if (!EQ_is_eq(maxZValue,newOriginalPoint[2],MINTOL))( u8 e; r4 H) c! q- t$ |
  42.         {
    $ X3 Q: _  ^' _& J3 s
  43.                 UF_VEC3_affine_comb(basePoint, -longDistance, projectOrignialUnitDir, newOriginalPoint);
    - S7 S$ V1 t2 m+ _
  44.         }
    ! k- E- J  M3 |  O9 X1 _

  45.   d1 B+ d  ~' }* k2 }  J
  46. 8 `' A' D! Y* f' K
  47.         Echo("cosAngle: %f ,longDistance:%.3f", cosAngle, longDistance);7 Z$ \: Q# Z8 c$ H
  48. }
复制代码
1 s2 G7 i  f3 A& A/ e0 E, _0 k

2 W2 C; L: \4 `5 b  V& l  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二次开发专题模块培训报名开始啦

    我知道了