嘿,数学极客,我有一个问题一直困扰我一段时间。这是个人项目。
我有三个点:红色,绿色和蓝色。它们位于纸板条上,红点位于左下方(0,0),蓝点位于右下方(1,0),绿点位于左上方。想象一下,退一步从一个角度拍摄卡片。如果你要找到图片中每个点的中心(假设单位是像素),你会如何找到图片中卡片面部的法线向量(相对于相机)?
现在我已经了解了一些关于这个问题的事情:
希望有人在那里完成这个或者是数学天才。我有两个朋友在这里帮助我,我们 - 到目前为止 - 都没有成功。
答案 0 :(得分:14)
答案 1 :(得分:2)
从它的声音来看,你有三点 p 1 , p 2 和 p 3 定义一个平面,你想找到平面的法向量。
将点表示为来自原点的向量,equation for a normal vector将为
n =( p 2 - p 1 )x( p 3 - p 1 )
(其中x是两个向量的交叉积)
如果您希望向量从卡片的前面向外指向,则ala右手边的规则,设置
p 1 =红色(左下角)点
p 2 =蓝色(右下角)点
p 3 =绿色(左上角)点
答案 2 :(得分:2)
@ Ian Boyd ...我喜欢你的解释,只是当你说要解决 b z 时,我才陷入第2步。您的答案中仍然有 b z ,我认为您的 b z 不应该在您的答案中回答...
b z 应为+/-平方根 g x 2 + g < sub> y 2 + g z 2 - b x 2 - b y 2
我自己这样做之后,当你解决了g z 时,我发现很难用 b z 代替第一个等式,因为当用b z 代替时,你现在得到:
g z = - (g x b x + g y b y )/ sqrt(g x 2 + g y 2 + g z 2 - b x 2 - b y 2 )
使这个困难的部分是平方根中有 g z ,所以你必须将它分开并组合 g z 在一起,解决 g z 我做过的,只是我不认为我解决它的方式是正确的,因为当我为自己编写了计算 g z 的程序,我使用了 g x 和 g y 值以查看我的答案是否与您的答案相符,但事实并非如此。
所以我想知道你是否可以帮助我,因为我真的需要让它为我的一个项目工作。谢谢!
答案 3 :(得分:1)
在这里思考我的脚。
你的有效输入是表观比率RB / RG [+],视角BRG,以及(假设)RB与你的屏幕坐标y轴的角度(我错过了什么)。你需要标准化法线(heh!)向量的组成部分,我认为它只有两个独立的值(如果看到卡片,你会留下一个前后模糊度。)[++]
所以我猜这是可能的......
从这里开始,我假设RB的视角始终为0,我们可以稍后围绕z轴旋转最终解。
从平行于观察平面定位的卡开始,并以“自然”方式定向(即,您尊重上下左右对比分配)。我们可以通过围绕初始x轴(\theta
)旋转-\pi/2 < \theta < \pi/2
,然后围绕初始y轴旋转\phi
来达到卡的所有有趣位置(对于{{ 1}})。请注意,我们保留了RB矢量的明显方向。
下一步根据-\pi/2 < \phi < \pi/2
和\theta
计算表观比率和视角,并反转结果。[+++]
围绕\phi
轴的原始旋转矩阵R_y(\phi)R_x(\theta)(0, 0, 1)
,法线为R_i
。
[+]绝对长度不计算,因为它只是告诉你到卡的距离。
[++]还有一个假设:从卡片到视图平面的距离远大于卡片的大小。
[+++]这里你从三维空间到观察平面使用的投影很重要。这是困难的部分,但不是我们可以为你做的事情,除非你说你正在使用什么投影。如果您使用的是真正的相机,那么这是一个透视投影,基本上涵盖在任何有关3D图形的书籍中。
答案 4 :(得分:0)
正确,法线向量不会随距离而变化,但纸张在图片上的投影会随距离而变化(简单:如果你有一个小纸板,则没有任何变化。 如果你有1英里宽,1英里高的纸板,你旋转它使一侧更近,另一侧更远,近侧放大,远侧缩短。你可以立即看到一个矩形不是一个矩形,而是一个空格)
小角度和以中间为中心的相机最精确的方法是测量中间线上“正常”图像和角度图像之间的宽度/高度比(因为它们不会扭曲)。
我们将x定义为从左到右,y定义为从上到下,z从远到近定义。
然后
x = arcsin(measuredWidth / normWidth)红蓝色
y = arcsin(measuredHeight / normHeight)红绿色
z = sqrt(1.0-x ^ 2-y ^ 2)
我明天会计算出更精确的解决方案,但我现在太累了......
答案 5 :(得分:0)
你可以使用u,v,n co-ornnates。将视点设置为“眼睛”或“相机”的位置,然后将x,y,z坐标转换为u,v,n。从那里你可以确定法线,如果你想要(u',v',n')可以确定透视和可见表面。另外,请记住2D = 3D,z = 0。最后,确保使用同质的坐标。