在光度立体中,光源位姿对于法向量求解具有重要意义。为了方便光源结构设计,通常会模拟测试光源位姿。一般用zenith(天顶角)、azimuth(方位角)来定义光源方向,或者分别用slant 和 tilt:
在这里插入图片描述
θ l : 一 般 称 为 天 顶 角 或 极 角 , 分 别 对 应 z e n i t h 和 s l a n t ; φ l : 一 般 称 为 方 位 角 或 偏 角 , 分 别 对 应 a z i m u t h 和 t i l t \theta_l:一般称为天顶角或极角,分别对应zenith和slant ; \\ \varphi_l:一般称为方位角或偏角,分别对应azimuth和tilt θlzenithslant;φlazimuthtilt
不难得到光源方向L的表达式:
L ⃗ = ( sin ⁡ θ l cos ⁡ φ l , sin ⁡ θ l sin ⁡ φ l , cos ⁡ θ l ) \vec{L}=\left(\sin \theta_{l} \cos \varphi_{l}, \sin \theta_{l} \sin \varphi_{l}, \cos \theta_{l}\right) L =(sinθlcosφl,sinθlsinφl,cosθl)
假设模拟的光源共球面,一般设计穹顶式光源结构:
在这里插入图片描述
给定球半径,以及不同高度的圆环及其均匀分布的光源数量,即可通过上述光源方向表达式,绘制穹顶式光源结构图。

clc
close all
clear all

R = 100;   % 球半径
heightLists = [20,40,60,80];   % 圆环高度 
lightNums = [20,16,12,8];  % 对应圆环分布的光源个数 高度越低,圆半径越大,分布光源数量越多
lens = length(lightNums);
lightPoints = [];
mark = [];
index = 0;
bias = 3;  % text标记位置偏差
for i = 1:lens
    r = sqrt(R^2 - heightLists(i)^2);
    slant = atan2(r,heightLists(i));
    tiltStep = 2*pi / lightNums(i);
    for j = 1:lightNums(i)
        index = index + 1;
        tilt = tiltStep * (j - 1);
        x = r * cos(tilt) * sin(slant);
        y = r * sin(tilt) * sin(slant);
        lightPoints = [lightPoints;[x y heightLists(i)]];
        mark = [mark;num2str(index,'%02d')];
    end
end
figure
scatter3(lightPoints(:,1),lightPoints(:,2),lightPoints(:,3),100,lightPoints(:,3),"filled")
xlabel('X')
ylabel('Y')
zlabel('Z')
xlim([-100 100])
ylim([-100 100])
zlim([0 100])
text(lightPoints(:,1) + bias,lightPoints(:,2) + bias,lightPoints(:,3),mark,'color','r','FontSize',13) % z轴方向无偏差
h = colorbar; 
set(get(h,'label'),'string','positions');%colorbar name

在这里插入图片描述
Reference:

  1. 散点图标记及colorbar
Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐