Graphics 计算曲面的地平线?-非极值

Graphics 计算曲面的地平线?-非极值,graphics,3d,points,bezier,geometry-surface,Graphics,3d,Points,Bezier,Geometry Surface,我需要找到两个可视地平线的点,一个曲面 我有: 四个角点的XYZ 2个曲边bezier点的XYZ 我需要计算: 2个水平点的XY 2个水平点的XYZ 注意:我问了这个问题,得到了一个解决方案,但它只找到了曲线的极值,没有找到地平线点,根据两条曲线相对于彼此的位置和旋转而变化。是否先旋转曲线,使角点之间的连接水平,然后计算极值 要进行视觉测试,可以将示例图像旋转约150度: 请注意,此曲线的极值并不完全在您想要的位置,但这可能是由多个因素造成的,例如,您标记地平线点的方式似乎不那么精确

我需要找到两个可视地平线的点,一个曲面

我有:

  • 四个角点的XYZ
  • 2个曲边bezier点的XYZ
我需要计算:

  • 2个水平点的XY
  • 2个水平点的XYZ


注意:我问了这个问题,得到了一个解决方案,但它只找到了曲线的极值,没有找到地平线点,根据两条曲线相对于彼此的位置和旋转而变化。

是否先旋转曲线,使角点之间的连接水平,然后计算极值

要进行视觉测试,可以将示例图像旋转约150度:


请注意,此曲线的极值并不完全在您想要的位置,但这可能是由多个因素造成的,例如,您标记地平线点的方式似乎不那么精确。

您所寻找的实际上是一个轮廓,而不是地平线。
最简单的方法是找到法线指向相机的曲面部分(点积为负)和法线远离相机的曲面部分(点积为正)之间的边界


使用三角形网格,可以直接使用法线来执行此操作。使用NURBS,您可能会找到一个闭合公式来实现这一点。

您没有说明曲面是如何定义的,只是它由两条二次Bézier曲线限定。建造这样一个表面有很多方法,每一种建造方法都有不同的视野。所以这个答案将是猜测

地平线由曲面上的点组成,从摄影机到该点的矢量与曲面相切,如下所示:

二次Bézier曲线具有参数方程

B(t)=(1)−t)2 P0+2(1−t)tp1+t2p2

区分与t相关的值,得到曲线的切线:

B′(t)=2(t−1)P0+2(1)−2t)P1+2t P2

这是平行于从相机(原点)到曲线的向量,如果

B(t)×B′(t)=0


对t求这个,曲线上的点就在地平线上。如何将其扩展到整个曲面的地平线取决于曲面的构造方式。(也许您可以在曲面的每一端找到曲线的地平线点,并用一条直线将它们连接起来?

已知的XYZ点是投影后计算的点。所以不要同时考虑这两个问题。另外,3D世界的“摄影机”位于0,0,0 XYZ,指向0,0,0 XYZ角度。换句话说,XYZ点已经准备好进行计算,“相机”不需要担心。很好的视觉线索。想透露是哪个软件创建的吗?