沿矢量变形三角形以获得特定角度

时间:2013-09-18 14:02:45

标签: math 3d geometry

我正在尝试从共享相同来源的3d空间中的许多段创建二叉树。 合并两个段时,我希望在子节点的行之间有一个特定的角度。 下图说明了我的问题。 C显示父节点的位置,A和B显示子位置。 N是从C到A和C到B的载体的平均载体。

triangle

对于给定的角度,我如何确定点P? 谢谢你的帮助

2 个答案:

答案 0 :(得分:2)

P = C + t * ((A + B)/2 - C)    t is unknown parameter
PA = A - P                     PA vector 
PB = B - P                     PB vector
Tan(Fi) = (PA x PB) / (PA * PB)    (cross product in the nominator, scalar product in the denominator)
Tan(Fi) * (PA.x*PB.x + PA.y*PB.y) = (PA.x*PB.y - PA.y*PB.x)

这是t的二次方程,经过求解后我们得到两个(对于非退化情况)P点的可能位置(第二个位于AB线的另一侧)

<强>增加:

Let's ax = A.x  - A point X-coordinate and so on,
abcx = (ax+bx)/2-cx, abcy = (ay+by)/2-cy
pax = ax-cx - t*abcx, pay = ay-cy - t*abcy
pbx = bx-cx - t*abcx, pby = by-cy - t*abcy
ff = Tan(Fi) , then
ff*(pax*pbx+pay*pby)-pax*pby+pay*pbx=0
ff*((ax-cx - t*abcx)*(bx-cx - t*abcx)+(ay-cy - t*abcy)*(by-cy - t*abcy)) -
 - (ax-cx - t*abcx)*(by-cy - t*abcy) + (ay-cy - t*abcy)*(bx-cx - t*abcx) = 

 t^2 *(ff*(abcx^2+abcy^2)) + 
 t *  (-2*ff*(abcx^2+abcy^2) + abcx*(by-ay) + abcy*(ax-bx) ) +
      (ff*((ax-cx)*(bx-cx)+(ay-cy)*(by-cy)) - (ax-cx)*(by-cy)+(bx-cx)*(ay-cy)) =0     

这是具有系数

的二次方程AA*t^2 + BB*t + CC = 0
AA = ff*(abcx^2+abcy^2)
BB = -2*ff*(abcx^2+abcy^2) + abcx*(by-ay) + abcy*(ax-bx)
CC = ff*((ax-cx)*(bx-cx)+(ay-cy)*(by-cy)) - (ax-cx)*(by-cy)+(bx-cx)*(ay-cy) 

P.S。我的回答是2d案例!

对于3d:仅使用标量积(使用矢量长度)可能更简单

Cos(Fi) = (PA * PB) / (|PA| * |PB|)

答案 1 :(得分:2)

另一种解决方案可能是在 N 向量上使用二进制搜索 P 是否接近 C 然后角度会更小, P 是否远离 C ,角度会更大,适合二分搜索。