Search code examples
graphics3dpointsbeziergeometry-surface

Calculate the horizon of a curved face? - Not extrema


I need to find the 2 points of the visual horizon, of a curved face.

I have:

  • XYZ of the 4 corner points
  • XYZ of the 2 curved edge bezier points

And I need to calculate either:

  • XY of the 2 horizon points
  • XYZ of the 2 horizon points

Note: I got a solution the last time I asked this question, but it only found the extrema of the curves, not the horizon points, which changes based on the position and rotation of both curves in respect to each other.


Solution

  • You don't say how your surface is defined, only that it is bounded by two quadratic Bézier curves. There are lots of ways to build such a surface, and each way of building it would have a different horizon. So this answer is going to be guesswork.

    The horizon consists of those points on the surface where the vector from the camera to the point is tangent to the surface, as shown here:

    Tangent to Bézier curve

    A quadratic Bézier curve has parametric equation

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

    differentiating that with respect to t gives us the tangent to the curve:

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

    and this is parallel with the vector from the camera (at the origin) to the curve if

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

    Solve this for t and you'll have the point on the curve at the horizon. How you can extend this to the horizon for the whole surface depends on how your surface is constructed. (Maybe you can just find the horizon points for the curves at each end of the surface and join them with a straight line?)