5

我需要找到一个曲面的视觉地平线的 2 个点。

我有:

  • 4 个角点的 XYZ
  • 2 个弯曲边缘贝塞尔点的 XYZ

我需要计算:

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

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

4

3 回答 3

2

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

为了直观地测试它,您可以将示例图像旋转大约 150 度:

旋转图片 http://www.freeimagehosting.net/uploads/ad502509e9.png

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

于 2009-02-22T11:27:59.480 回答
2

你没有说你的表面是如何定义的,只是说它由两条二次贝塞尔曲线界定。有很多方法可以构建这样的表面,每种构建方法都会有不同的视野。所以这个答案将是猜测。

地平线由表面上的那些点组成,其中从相机到该点的矢量与表面相切,如下所示:

与贝塞尔曲线相切

二次贝塞尔曲线具有参数方程

B( t ) = (1 - <em>t) 2 P 0 + 2(1 - <em>t) t P 1 + t 2  P 2

对 t 进行微分可以得到曲线的切线:

B′( t ) = 2( t  - 1) P 0 + 2(1 - 2 t ) P 1 + 2 t  P 2

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

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

为t解决这个问题,您将在曲线上找到地平线上的点。如何将其扩展到整个表面的地平线取决于表面的构造方式。(也许你可以在曲面的每一端找到曲线的地平线点并用直线连接它们?)

于 2009-02-22T12:39:41.523 回答
1

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

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

于 2009-02-22T11:29:01.397 回答