Показать сообщение отдельно
  #2  
Старый 09.11.2015, 13:45
AlexSku AlexSku вне форума
Специалист
 
Регистрация: 07.05.2007
Адрес: Москва
Сообщения: 884
Репутация: 21699
По умолчанию

Один из способов - самому построить кривую Безье. Имеются начальная и конечная точки (P0, P3). Вы добавляете две промежуточные точки.
Bez.png
Уравнение кривой:
C(s) = P0 * (1 - s)^3 + P1 * 3 * s * (1 - s)^2 + P2 * 3 * s^2 * (1 - s) + P3 * s^3

где s меняется от 0 до 1.
Вот процедура (писал для DirectX) - из книги Адамса
Код:
procedure CubicBezierCurve(vecPoint1,
                      vecPoint2,
                      vecPoint3,
                      vecPoint4: TD3DXVECTOR3;
                      Scalar: Single;
                      var vecOut: TD3DXVECTOR3);
var v1: TD3DXVECTOR3;
begin
  // C(s) =
    // P0 * (1 - s)^3 +
    D3DXVec3Scale(vecOut, vecPoint1, (1.0-Scalar)*(1.0-Scalar)*(1.0-Scalar));
    // P1 * 3 * s * (1 - s)^2 +
    D3DXVec3Scale(v1, vecPoint2, 3.0*Scalar*(1.0-Scalar)*(1.0-Scalar));
    D3DXVec3Add(vecOut, vecOut, v1);
    // P2 * 3 * s^2 * (1 - s) +
    D3DXVec3Scale(v1, vecPoint3, 3.0*Scalar*Scalar*(1.0-Scalar));
    D3DXVec3Add(vecOut, vecOut, v1);
    // P3 * s^3
    D3DXVec3Scale(v1, vecPoint4, Scalar*Scalar*Scalar);
    D3DXVec3Add(vecOut, vecOut, v1);
end;
Ответить с цитированием