วิธีสร้างฟังก์ชันเส้นโค้งแบบเรียกซ้ำใน C ++


10

ในขณะนี้ฉันกำลังทำงานกับวิธีการแก้สมการเชิงอนุพันธ์ที่เรียกว่าการจัดระเบียบแบบพื้นฐาน -line สิ่งที่ฉันมีปัญหาคือการสร้างวิธีการสร้างคำสั่งโค้งอิสระโดยมีความสัมพันธ์ ด้วย เงื่อนไขเริ่มต้น และฉันมีปัญหาแม้จะเริ่มต้นด้วยปัญหานี้เนื่องจากการเรียกซ้ำอาจเริ่มจากทั้ง "top" หรือ "bottom" และฉันทำงานเป็นประเภทบล็อกของนักเขียนทั่วไป สิ่งที่ฉันไม่สามารถรับรอบสิ่งที่ฉันต้องทำB 1 i (x)={ 1

Bผมk+1(x)=x-xผมxk+ผม-xผมBผมk+xk+ผม+1-xxk+ผม+1-xผม+1Bผม+1k(x)
Bผม1(x)={1สำหรับ xผมx<xผม+10มิฉะนั้น

คำตอบ:


7

ฉันสามารถแนะนำให้คำปรึกษาหนังสือ NURBSซึ่งดูเหมือนจะเป็นข้อความคลาสสิกในเรื่องนี้ อัลกอริทึมของตัวเองให้ในหน้า 72มันสามารถใช้ได้สำหรับการดูออนไลน์



4

ฉันไม่ทราบว่าสิ่งนี้มีประสิทธิภาพเพียงใด แต่วิธีหนึ่งในการใช้เทมเพลต c ++ คือ:

ลำดับคือ k, t คือโครงสร้างปมและ x คือค่าที่คุณต้องการ

template <int k> 
real BSpline(real x, real *t)
{
    if (*t <= x && x < *(t+k))
    {
        real a = (x - *t) / (*(t+k-1) - *t);
        real b = (*(t+k) - x) / (*(t+k) - *(t+1));

        return a * BSpline<k-1>(x, t) + b * BSpline<k-1>(x, (t+1));
    }
    else
        return 0;
};

template <>
real BSpline<1>(real x, real *t)
{
    if (*t <= x && x < *(t+1))
        return 1.;
    else
        return 0.;
};
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.