我需要一个想法!我想用3D模拟眼睛上的血管网络。我已经统计了与血管直径,长度等有关的分支行为。我现在所困的是可视化:
眼睛近似为球体E
,其中心位于原始C = [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_0
,生成一个半径为L
的球体,代表我们可能使用正确长度绘制的所有点。此集称为pool
。pool
仅包含C
和r*0.95
之间距离r
的点,因此仅包括眼周边的点。a
的相对角度(2)的点。 问题是,无论我想要什么角度a
,实际上都不是点积测量的。假设我想要一个0°的角度(即新的段跟随前一个方向相同的方向,我实际得到的是一个大约30度的角度,因为球体的曲率。我猜我想要的更多是2D从从球体到分支点的正交角度观察时的角度。请查看下面的屏幕截图以进行可视化。
有什么想法吗?
(1)原因是,具有最大直径的子节点通常遵循前一段的路径,而较小的子节点倾向于以不同的角度。
(2)按acos(dot(v1/norm(v1), v2/norm(v2)))
解释问题的屏幕截图:
黄线:上一段 红线:"新"分段到其中一个点(不一定是正确的一个) 蓝色x' es:池(文本=以弧度表示的角度)
答案 0 :(得分:1)
我将用自己的符号重述问题:
在以半径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)