我需要找到曲面的视界的2个点。
我有:
我需要计算:
注意:我得到了last time我问过这个问题的解决方案,但它只找到了曲线的极值,而不是地平线点,它根据两条曲线相对于彼此的位置和旋转而变化。
答案 0 :(得分:2)
首先旋转曲线是否有效,以便角点之间的连接是水平的,然后计算极值?
要进行视觉测试,您可以将示例图像旋转约150度:
Rotated image http://www.freeimagehosting.net/uploads/ad502509e9.png
请注意,此曲线的极值并不完全符合您的要求,但这可能是由多个因素引起的,例如标记水平点的方式似乎并不那么精确。
答案 1 :(得分:2)
您没有说明您的曲面是如何定义的,只是它是由两条二次Bézier曲线限定的。有很多方法可以构建这样一个表面,每种构建它的方式都有不同的视野。所以这个答案将是猜测。
地平线由表面上的那些点组成,从相机到点的矢量与表面相切,如下所示:
二次Bézier曲线具有参数方程
B( t )=(1 - t ) 2 P 0 + 2(1 - < em> t ) t P 1 + t 2 P 2
区分t相对于t给出了曲线的切线:
B'( t )= 2( t - 1)P 0 + 2(1 - 2 )P 1 + 2 P 2
这与从相机(在原点)到曲线的矢量平行(如果
)B( t )×B'( t )= 0
为 t 解决这个问题,你将在地平线上得到曲线上的点。如何将其扩展到整个表面的地平线取决于表面的构造方式。 (也许你可以找到曲面两端曲线的水平点,并用直线连接它们?)
答案 2 :(得分:1)
您正在寻找的内容实际上被称为剪影,而非地平线 最简单的方法是找到法线指向相机的表面部分(点积为负)与法线指向远离相机的表面部分之间的边界(点积为正) 。
使用三角形网格,您可以使用法线直接执行此操作。使用NURBS,你可以找到一个封闭的公式来做到这一点。