سؤال

أدناه هي وظيفة الاستيفاء المكعب:

public float Smooth(float start, float end, float amount)
{
    // Clamp to 0-1;
    amount = (amount > 1f) ? 1f : amount;
    amount = (amount < 0f) ? 0f : amount;

    // Cubicly adjust the amount value.
    amount = (amount * amount) * (3f - (2f * amount));

    return (start + ((end - start) * amount));
}

ستوفر هذه الوظيفة مكعبا بين القيمة البداية والنهاية مع توفير مبلغ بين 0.0F - 1.0F. إذا كنت ترغب في رسم هذا المنحنى، فسوف ينتهي بك الأمر مع شيء مثل هذا:

انتهت صلاحية الصورة صورة إزالتها

الوظيفة المكعبة هنا هي:

    amount = (amount * amount) * (3f - (2f * amount));

كيف يمكنني ضبط هذا لإنتاج اثنين من الظلال الإنتاج داخل وخارج؟

لإنتاج منحنيات مثل هذا: (الخطية البدء في نهاية مكعب)

انتهت صلاحية الصورة صورة إزالتها

كدولة واحدة

ومثل هذا كآخر: (ابدأ مكعب في النهاية الخطية)

انتهت صلاحية الصورة صورة إزالتها

أي شخص لديه أي أفكار؟ شكرا مقدما.

هل كانت مفيدة؟

المحلول

ما تريده هو مجموعة تحريك مكعبة:

alt text

حيث P0 هي نقطة البداية، P1 هي نقطة النهاية، M0 هي بداية الظل، و M1 هي نهاية الظل

نصائح أخرى

هل يمكن أن يكون لديك استيفاء خطي واستيفاء مكعب ورابط نقل بين وظائف الاستيفاء.

بمعنى آخر.

cubic(t) = cubic interpolation
linear(t) = linear interpolation
cubic_to_linear(t) = linear(t)*t + cubic(t)*(1-t)
linear_to_cubic(t) = cubic(t)*t + linear(t)*(1-t)

حيث تتراوح من 0 ... 1

حسنا، طريقة بسيطة سيكون هذا:

-Expand your function by 2 x and y
-Move 1 to the left and 1 down
Example: f(x) = -2x³+3x²
g(x) = 2 * [-2((x-1)/2)³+3((x-1)/2)²] - 1

أو برمجيا (ضبط مكعب):

double amountsub1div2 = (amount + 1) / 2;
amount = -4 * amountsub1div2 * amountsub1div2 * amountsub1div2 + 6 * amountsub1div2 * amountsub1div2 - 1;

للآخر، ببساطة ترك "الحركة":

g(x) = 2 * [-2(x/2)³+3(x/2)²]

أو برمجيا (ضبط مكعب):

double amountdiv2 = amount / 2;
amount = -4 * amountdiv2 * amountdiv2 * amountdiv2 + 6 * amountdiv2 * amountdiv2;
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top