Matlab 球面上两直线段间相对角的近似计算
我需要一个主意!我想在3D中对眼睛上的血管网络进行建模。我已经对与血管直径、长度等相关的分支行为进行了统计。我现在所关注的是可视化: 眼睛近似为一个球体,中心位于origoMatlab 球面上两直线段间相对角的近似计算,matlab,math,geometry,computational-geometry,Matlab,Math,Geometry,Computational Geometry,我需要一个主意!我想在3D中对眼睛上的血管网络进行建模。我已经对与血管直径、长度等相关的分支行为进行了统计。我现在所关注的是可视化: 眼睛近似为一个球体,中心位于origoC=[0,0,0]和半径r 我想要实现的是基于以下输入参数,它应该能够在E的表面/周长上绘制线段: 输入: 上一段结束的笛卡尔位置:P_0=[x_0,y_0,z_0] 段长度:L 节段直径:d 相对于上一段的所需角度:a(1) 输出: 结果段结束的笛卡尔位置:P_1=[x_1,y_1,z_1] 我现在要做的是: 从P_
C=[0,0,0]
和半径r
我想要实现的是基于以下输入参数,它应该能够在E
的表面/周长上绘制线段:
输入:
- 上一段结束的笛卡尔位置:
P_0=[x_0,y_0,z_0]
- 段长度:
L
- 节段直径:
d
- 相对于上一段的所需角度:
(1)a
- 结果段结束的笛卡尔位置:
P_1=[x_1,y_1,z_1]
P_0
,生成一个半径为L
的球体,表示我们可能绘制到的具有正确长度的所有点。此集合称为池
pool
仅包括距离C
在r*0.95
和r
之间的点,因此仅包括眼睛周围的点a
的相对角度(2)的点a
,实际上都不是点积所测量的角度。假设我想要一个0的角度(也就是说,由于球体的曲率,新线段的方向与前一线段的方向相同,实际上我得到的是一个30度左右的角度。我想我想要的更多的是从球体到分支点的正交角度看时的2D角度。请看下面的屏幕截图以获得可视化效果
有什么想法吗
(1) 这样做的原因是,直径最大的子节点通常遵循前一段的路径,而较小的子节点的角度往往不同 (2) 由
acos(点(v1/norm(v1),v2/norm(v2))计算得出)
解释问题的屏幕截图: 黄线:上一段 红线:其中一个点的“新”段(不一定是正确的) 蓝色x'es:池(文本=角度,弧度)
我将用我自己的符号重申这个问题: 给定以C为中心半径为r的球体表面上的两点p和Q,找到一个新点T,使从PQ到QT的转角为a,QT的长度为L 由于线段相对于球体较小,我们将在轴点Q处使用球体的局部平面近似(如果这不是一个好的假设,您需要在问题中更加明确) 然后可以按如下方式计算T
// First compute an aligned orthonormal basis {U,V,W}.
// - {U,V} should be a basis for the plane tangent at Q.
// - W should be normal to the plane tangent at Q.
// - U should be in the direction PQ in the plane tangent at Q
W = normalize(Q - C)
U = normalize(Q - P)
U = normalize(U - W * dotprod(W, U))
V = normalize(crossprod(W, U))
// Next compute the next point S in the plane tangent at Q.
// In a regular plane, the parametric equation of a unit circle
// centered at the origin is:
// f(A) = (cos A, sin A) = (1,0) cos A + (0,1) sin A
// We just do the same thing, but with the {U,V} basis instead
// of the standard basis {(1,0),(0,1)}.
S = Q + L * (U cos A + V sin A)
// Finally project S onto the sphere, obtaining the segment QT.
T = C + r * normalize(S - C)
我不确定我是否得到了您想要做的:球体-圆柱体相交?(圆柱体轴穿过原点?)。即,您想在球体上画圆?您所说的线段并不清楚。它是球体上的圆形线段吗?此线段的直径是指在球体上测量还是穿过球体?在这两种情况下,在点
P_0
处创建球体都是不够的。如果通过球体测量的圆段的平均半径,你需要一个圆柱体,如果你的意思是在球体上测量,你需要一些不同的东西基本上是线段。从一个分支点到另一个分支点。此外,直径仅用于可视化,与绘制方向的讨论无关。如果线段是(直线)直线,为什么它有长度和直径?不用管直径。在我的最后一个程序中,线段是矩形而不是直线。更新:Cylinder谢谢你,先生。这确实像我要找的。我今天晚些时候有机会的时候会试着实现它。这还不够。进一步的要求是T也应该被定位球体上的d。这对角度有一个约束,但我们正在寻找的角度实际上是正交观察分支点时的角度。这有什么意义吗?@c.jespersen抱歉,我无意中遗漏了一步。请参见编辑。S是切面上Q T处的下一个点。然后S投影到球体上。wWorks.太棒了。我能请你对每个向量、它的角色等说几句话吗?@c.jespersen我添加了一些解释,还添加了一个额外的步骤(可能不必要)来将U投影到Q处的相切平面上。