|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
' u, x. a5 C, }9 b* a
; R4 s E( r2 _5 O {
9 |7 B. K" T- _+ C9 P2 M% ^- k【二次开发源码】一种基于点投影,获取投影原始点的方法$ Q; N9 h& I4 O( a4 P/ m5 u
# h: A1 e0 @$ z F
一直斜边和一个直边的向量,单位向量可以通过dot 获取 夹角; U( H2 V! A U% R
然后通过勾股定理,计算得到长边值,最后进行基于点的affine,即可获取斜边向量/ k* N" D0 {9 X$ I3 [
5 S5 R' Y1 V0 Y& ^: b a
( ]0 P1 z5 P3 e/ k7 F) S- //这里仅仅考虑Z轴方向
* A. W0 o5 T! k# f - void Get_Projection_OrignalPoint(double basePoint[3],double maxZValue,double projectOrignialUnitDir[3], double newOriginalPoint[3])% j# B* C2 O* x; C% Y- X
- {6 R) K9 s K% w) k# F; J2 i# |+ K
- double dotResult;
( Q. M3 b- p1 C0 I - double longDistance;8 [& P4 G4 s( i( {6 A: ^
- double zDir[3] = { 0.0,0.0,1.0 };# m2 k, J. _ M3 I! A
- //直线距离: q/ [& {! v k) g, R2 l
- double deltaProjectDistance = fabs(maxZValue - basePoint[2]);' ?3 j5 s# M! e- K
- $ d9 J( c; W; z, }7 ~3 m
- Echo("斜度垂直直线距离:%.3f maxZValue:%.3f", deltaProjectDistance, maxZValue);9 H$ b- \1 c$ U0 G- F' S0 }: H
, I, U" i" o |& N7 t1 d6 B- if ( EQ_is_eq(deltaProjectDistance,0.0,MINTOL)) //就是最高点 ,直接返回9 ?$ n; G7 e2 H2 ]$ [! V. Y# g5 M* C
- {9 U# Q. z: t% | ~0 Y9 s3 z
- UF_VEC3_copy(basePoint, newOriginalPoint);2 J# l) ]/ h6 I
- return;* z' X# ]& q, g5 v0 \" E( H
- }
2 f. [" ], Q8 `: @- N) a
0 d4 K/ C! K! ]8 w6 ]/ _5 f- //计算夹角,通过单位矢量: i, \) y7 R4 u% ^/ `/ x) p
- //faceDir 可能反向
4 I, [- {% R: b& b9 v$ S - UF_VEC3_dot(projectOrignialUnitDir, zDir, &dotResult);1 W8 _- F$ Z8 U* }; w* M3 |
- // cos() faceDir.zDir = |FaceDir||ZDir|cos(angle)
( J( l4 u' F% r! O) @9 Z - double cosAngle = fabs(dotResult);& |, W: E) u" I V" @4 [
-
3 q9 n4 a: x7 w) M; b' c - //斜边距离
" k/ g) I; ]5 k6 X - if (EQ_is_zero(cosAngle, MINTOL))3 r/ i; U- U) K4 S! W! @
- { c$ D/ d% ` _/ K
- longDistance = deltaProjectDistance;
8 M/ I, Z5 t( |5 H - }
, y7 O- A; r: @! d* y - else C3 O. H# n- O* V, k4 b
- {
0 W2 B+ g% X& z9 j7 D - longDistance = deltaProjectDistance / cosAngle;. T1 [( y8 p/ D1 A4 G2 M b) q
- }
) o' E% {. Z) O1 n0 F - ; ~* k1 ~ r4 w/ O4 D( z' S
- //这里可能出现方向相反,我们需要进行一次判定
6 M" v2 }. Q' N m
0 T2 C5 [, ~1 s# _- UF_VEC3_affine_comb(basePoint, longDistance, projectOrignialUnitDir, newOriginalPoint);+ K+ i* h6 m# P0 j4 h; G8 G5 h
; a+ l7 a( S* |: H4 D3 z- Echo("maxZValue: %f ,newOriginalPoint[2]:%.3f", maxZValue, newOriginalPoint[2]);. ]1 l( A% O& T+ E' L" b7 m
) I) K m' t( }4 y- if (!EQ_is_eq(maxZValue,newOriginalPoint[2],MINTOL))3 o$ y1 e0 s9 r
- {
8 C) J* \0 T- A1 v- Z5 l E" n - UF_VEC3_affine_comb(basePoint, -longDistance, projectOrignialUnitDir, newOriginalPoint);0 N' X9 r# @& A1 ~
- }
& j- |9 N0 n# d: x, u1 v' T - : T1 T" f6 h6 v$ F# T
- ! ^1 y! v4 o+ d- Q9 V$ J
- Echo("cosAngle: %f ,longDistance:%.3f", cosAngle, longDistance);2 i/ k/ [- H t/ @# y
- }
复制代码 ; A5 A3 }# M: {3 Y7 ]
# F2 q* L" C& z1 m: n |
|