我正在研究MATLAB中的光线跟踪几何问题,并且在我的程序中遇到了瓶颈.
该函数接收光线的起点和终点(lStart和lEnd),一组平面点和法线(pPoint和规范).然后,该函数计算沿着与每个平面相交的光线的距离.
以下是对原始等式的引用:https://en.wikipedia.org/wiki/Line%E2%80%93plane_intersection#Algebraic_form
我到目前为止的代码如下:
dists = (diag(bsxfun(@minus, pPoint, lStart) * norms')) ./ ((lEnd - lStart) * norms')';
Run Code Online (Sandbox Code Playgroud)
这是在循环中调用的,例如:
nRays = size(lStart, 1);
nPlanes = size(pPoint, 1);
dists = zeros(nPlanes, nRays);
for rayCtr = 1:nRays
dists(:, rayCtr) = (diag(bsxfun(@minus, pPoint, lStart(rayCtr, :)) * norms')) ./...
((lEnd(rayCtr, :) - lStart(rayCtr, :)) * norms')';
end
Run Code Online (Sandbox Code Playgroud)
这对于单个光线非常有效.
给定一个射线[1 x 3]和300个平面[300 x 3],我得到一个[300 x 1]矩阵,每个平面交点的距离.
我正在努力的是,将其矢量化以在光线列表上工作.
典型数据集中的大小为:
lStart, …Run Code Online (Sandbox Code Playgroud)