正如主题所述:如何将Hermite曲线转换为Bezier曲线?具体而言,我正在寻找一种将Microsoft XNA Framework的使用Hermite插值的Curve类转换为使用Windows Presentation Foundation的StreamGeometry或PathGeometry绘制的方法。
我遇到了一个类似的问题([在OpenGL中绘制Hermite曲线),其中答案如下。
即使有这些信息,我仍然无法计算出控制点。问题在于Curve类只公开了TangentIn和TangentOut作为标量。由于多项式的绘制发生在二维空间(时间,值),因此需要将该标量转换为二维向量以应用于该公式中。但是,我不确定这个转换过程涉及哪些步骤,但我怀疑我需要应用Hermite微分方程。
如果有帮助的话,这是用Reflector找到的评估给定时刻曲线的代码。
任何信息都非常感激。
我遇到了一个类似的问题([在OpenGL中绘制Hermite曲线),其中答案如下。
[b0] = 1 [ 3 0 0 0] [h0]
[b1] - [ 3 0 1 0] [h1]
[b2] 3 [ 0 3 0 -1] [v0]
[b3] [ 0 3 0 0] [v1]
简化后为:
b0 = h0
b1 = h0 + v0/3
b2 = h1 - v1/3
b3 = h1
即使有这些信息,我仍然无法计算出控制点。问题在于Curve类只公开了TangentIn和TangentOut作为标量。由于多项式的绘制发生在二维空间(时间,值),因此需要将该标量转换为二维向量以应用于该公式中。但是,我不确定这个转换过程涉及哪些步骤,但我怀疑我需要应用Hermite微分方程。
如果有帮助的话,这是用Reflector找到的评估给定时刻曲线的代码。
private static float Hermite(CurveKey k0, CurveKey k1, float t)
{
if (k0.Continuity == CurveContinuity.Step)
{
if (t >= 1f)
{
return k1.internalValue;
}
return k0.internalValue;
}
float num = t * t;
float num2 = num * t;
float internalValue = k0.internalValue;
float num5 = k1.internalValue;
float tangentOut = k0.tangentOut;
float tangentIn = k1.tangentIn;
return ((((internalValue * (((2f * num2) - (3f * num)) + 1f)) + (num5 * ((-2f * num2) + (3f * num)))) + (tangentOut * ((num2 - (2f * num)) + t))) + (tangentIn * (num2 - num)));
}
任何信息都非常感激。
Vector[]
:(x(t0), y(t0))
,(x(t1), y(t1))
,.... 我应该使用什么样的*t0,t1,...*值? - zwcloud