2013-01-10 54 views
-1

我在两个不同的平面上有椭圆光束的图像。我知道两个平面之间的距离(d =平面A和平面B之间的距离),并且知道了知道两个平面上椭圆的中心坐标计算出的旋转角theta(θ)。如何计算投射回光源原点的距离R?我可以找到从平面A到原点的距离(D)。我一直在想这个问题一段时间,不能完全弄明白。我想实现一个算法来计算R中的C#。编程部分很简单,但数学我不太确定如何去做。计算光束指向角度

enter image description here

+0

我不明白你问的问题 – argentage

+0

我想我想通了。它只是使用2个向量的点积计算出角度。我画的插图真的不清楚。我应该画2个向量。一个从平面A到平面B(用(Vx,Vy,Vz)坐标称之为V),另一个只是平面表面矢量的法线(用(Nx,Ny,Nz)坐标称之为N)。我图中的R值就是两个向量之间的角度φ。计算cos(phi)= V dot B /(| V || N |)所以phi就是ArcCos(V dot N)/(| V || N |)。 – Patratacus

回答

1

如果图像拍摄用长焦透镜轴线刺穿束源,使得缩短和离轴效果是微不足道的,情况最好从右侧为您绘制它被观看。然后你有两个相同的直角三角形,在光源处有共同的顶点。

|^--..._ 
rA | rB| ^^__ 
    |_____|______o (Pardon my ascii art skills.) 
    <--d--> 
    <--------x--> 

你似乎知道或可以很容易找到的rA和rB从束源图像elipse中心平面的距离,也可为d平面间的距离。你想知道x。

对于这个刚刚成立的比例

x/rA = (x-d)/rB. 

现在你可以很容易地解决对于x。

如果图像是从相对靠近光源的普通透镜拍摄的,则需要了解相机的几何图形,以便说明透视效果。即使这样,镜头失真也会导致错误,除非您知道很多关于相机的信息并进行一些精彩的更正。

+0

谢谢你的回答。我认为我的问题和解释并不清楚,但你肯定是在正确的轨道上。根据你的绘制,我实际上想知道rA和rB(或者基本上是在平面A和平面B上投影时产生rA和rB的角度。实际上我知道d和X. – Patratacus

+0

我只知道中心的位置在平面A(XA,YA)和平面B(XB,YB)上的椭圆和距离“d”分开两个平面,我可以测量距离“x”,我想计算矢量由每个平面上的点和矢量创建,如果光束在我的绘图中直接从平面中投射出来的话 – Patratacus

+0

谢谢@Gene让我朝着正确的方向前进,没有你的回应,我无法想象通过问题和解决办法很烦人,人们总是认为数学与编程没有任何关系,如果不知道数学方法,就不能编码算法 – Patratacus