Как центростремительный Catmull–Rom шлицует работа?

От этого сайта, который, кажется, имеет наиболее подробную информацию о шлицах Catmull-Rom, кажется, что четыре точки необходимы для создания шлица. Однако это не упоминает, как точки p0 и p3 влияют на значения между p1 и p2.

Другой вопрос, который я имею, состоит в том, как Вы создали бы непрерывные шлицы? Это было бы столь же легко как определение точек p1, p2, чтобы быть непрерывным с p4, p5 путем создания p4 = p2 (то есть, предполагая, что у нас есть p0, p1, p2, p3, p4, p5, p6..., pN).

Более общий вопрос состоит в том, как можно было бы вычислить касательные на шлицы Catmull-Rom? Это должно было бы включить взятие двух точек на шлице (скажите в 0,01, 0.011), и получение касательной на основе Pythagoras, учитывая координаты положения те входные значения дают?

17
задан nbro 9 August 2019 в 15:18
поделиться

2 ответа

Take a look at equation 2 -- it describes how the control points affect the line. You can see points P0 and P3 go into the equation for plotting points along the curve from P1 to P2. You'll also see that the equation gives P1 when t == 0 and P2 when t == 1.

This example equation can be generalized. If you have points R0, R1, … RN then you can plot the points between RK and RK + 1 by using equation 2 with P0 = RK - 1, P1 = RK, P2 = RK + 1 and P3 = RK + 2.

You can't plot from R0 to R1 or from RN - 1 to RN unless you add extra control points to stand in for R - 1 and RN + 1. The general idea is that you can pick whatever points you want to add to the head and tail of a sequence to give yourself all the parameters to calculate the spline.

You can join two splines together by dropping one of the control points between them. Say you have R0, R1, …, RN and S0, S1, … SM they can be joined into R0, R1, …, RN - 1, S1, S2, … SM.

To compute the tangent at any point just take the derivative of equation 2.

9
ответ дан 30 November 2019 в 14:17
поделиться

The Wikipedia article goes into a little bit more depth. The general form of the spline takes as input 2 control points with associated tangent vectors. Additional spline segments can then be added provided that the tangent vectors at the common control points are equal, which preserves the C1 continuity.

In the specific Catmull-Rom form, the tangent vector at intermediate points is determined by the locations of neighboring control points. Thus, to create a C1 continuous spline through multiple points, it is sufficient to supply the set of control points and the tangent vectors at the first and last control point. I think the standard behavior is to use P1 - P0 for the tangent vector at P0 and PN - PN-1 at PN.

According to the Wikipedia article, to calculate the tangent at control point Pn, you use this equation:

T(n) = (P(n - 1) + P(n + 1)) / 2

This also answers your first question. For a set of 4 control points, P1, P2, P3, P4, interpolating values between P2 and P3 requires information form all 4 control points. P2 and P3 themselves define the endpoints through which the interpolating segment must pass. P1 and P3 determine the tangent vector the interpolating segment will have at point P2. P4 and P2 determine the tangent vector the segment will have at point P3. The tangent vectors at control points P2 and P3 influence the shape of the interpolating segment between them.

6
ответ дан 30 November 2019 в 14:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: