ПредишенСледващото

Добър ден, harbachitatel.

Изявление на проблема
Има множество Y-Kow точки разположени равномерно върху ос X. на това е необходимо да се получи гладка графика, която преминава през всички дадени точки. Примерът по-долу:

Интерполация гладка равенство графики с помощта на Безие криви

Всички, които се интересуват, аз съм котка.

Има редица от стандартни решения за плавна крива през точките (в това отношение много интересни неща, написани на вече споменатата статия), като, например, сплайн интерполация. Когато третата Курсът е изобретен този алгоритъм, думата "интерполация" ме изпълва с ужас, и gugleniya при поискване "изглаждане графики" не даде резултати в рамките на правомощията на разбиране. Но след като аз имам да криви на Безие и много ми хареса. Чертае бърз алгоритъм е интуитивен ... Какво друго е необходимо за щастие. Е, по някакъв начин е започнало.

централната идея

Счупете идеята в три под-елемент, за да стане ясно и разбираемо.

Интерполация гладка равенство графики с помощта на Безие криви

  • Разстоянието от точка А до точки В1 и С1 бе решено да бъде равна на половината от височината на X и между точки В и С. А. т.н. Трудно ми е по някакъв начин да се оправдае този избор, но е важно, че това разстояние е по-малко на терена в X между точки А и Б. В противен случай може да има нещо подобно на изображението по-долу. Важно е да се разбере, че по-голямата разстоянието, толкова по-криволичещ кривата ще бъде и обратно. Разстояние в половината терен в X Струва ми се, най-добрите, но има вече възможни варианти.

    Интерполация гладка равенство графики с помощта на Безие криви

    Така се оказва, че проблемът се свежда до намиране на линията (B1 C1) и, всъщност, за подкрепа на точките B1 и C1. които след това ще се изгражда на Безие криви.

    Търсене направо

    Както е известно, линия на равнината, изразено от у = KX + б. където к - допирателна права ъгъл спрямо оста X. Когато открием к на. След това, знаейки, че линията минава през точка А и да знае своите координати, ние можем лесно да намерите б. б = YA -kXA. Така че всичко се свежда до намиране на коефициента.

    Търсене фактор к

    Кажа предварително, че к = TG (φ) = TG ((α-β) / 2) = (Sqrt ((ΔX 2 + (YA -YB) 2) * (ΔX 2 + (YA -YC) 2)) - Dx 2 - (YA -YB) * (YA -YC)) / (ΔX * ((Я -YB) - (Я -YC))). където ΔX - X разстояние между точките (не забравяйте, че ние сме равномерно разположени точки на X). По-долу е математически доказателства за верността на формулата, но ако не сте в настроение, може просто да го пропуснете.

    Интерполация гладка равенство графики с помощта на Безие криви

    Математически елиминиране коефициент к

  • (6) ∠C1 AC = ∠C1 АД + ∠DAC = φ + ∠DAC
    (7) ∠DAC = ∠O2 CA = β - гъвкави вътрешни ъгли, образувани от две успоредни линии (AD) и (О2 С) и рязане (AC)

    Под квадратните скоби се отнася до дължината на сегмента (не искам да използвам вертикални линии - Надявам се, че читателят ще ми прости)

  • От предходната алинея трябва да:
    Интерполация гладка равенство графики с помощта на Безие криви

    И така, к сме намерили; б, ние също знаем (виж по-горе), което означава, директен, в които се намират на контролната точка, ние знаем.

    Търсим отправни точки

    Интерполация гладка равенство графики с помощта на Безие криви

    Малко по математика, която докаже,

    ние си спомняме от тригонометрията, че:

    Ако приемем [АС1] равна на половината от височината на точките X между основната графиката (точки В и С. А. и т.н.), тогава:

    За приятното!

    изпълнение Пример за JSFiddle

  • Подкрепете проекта - споделете линка, благодаря!