Az interpoláció a sima grafikát a bezier görbék segítségével rajzolja meg
A nap kedves ideje, harbachitatel.
A probléma megfogalmazása
Az X tengely mentén egyenletesen elhelyezkedő Y pontok sorozata van, és egy sima gráfra van szükség, amely átmegy az összes ponton. Példa az alábbi képre:
Mindenki, aki érdekli, kérdezem a vágás alatt.
Számos szabványos megoldások egy sima görbe pontokon keresztül (ebben a tekintetben sok érdekes dolgot írt a már említett cikket), mint például a spline interpoláció. Amikor a harmadik során találták ezt az algoritmust, a „interpoláció” tölt el, horror, és gugleniya kérésre „kiegyenlítési grafikonok” nem ad eredményeket hatáskörben megértést. De valahogy eljutottam a Bezier-görbékhez, és nagyon tetszett nekik. Gyorsan rajzolódik, az algoritmus intuitív ... Mire van szükség a boldogsághoz? Nos, valahogy versenyzett.
A fő ötlet
Megszüntetem az ötletet három bekezdésbe, hogy érthetőbbé és érthetőbbé tegyem.
Így kiderül, hogy a probléma csökken az egyenes (B1 C1) és a B1 és C1 referenciapontok keresésére. amelyen később felépítjük a Bezier-görbéket.
Közvetlen keresés
Mint ismeretes, a síkban lévő vonalat az y = kx + b képlet adja meg. ahol k a vonal meredeksége az X tengelyhez, amikor k. majd tudva, hogy az egyenes vonal áthalad az A ponton és tudta a koordinátáit, könnyen megtalálhatjuk b. b = YA-kXA. Így minden a k koefficiens megtalálásához vezet.
Keresse meg a k együtthatót
Azt előre megmondani, hogy k = tg (φ) = tg ((α-β) / 2) = (SQRT ((AX 2 + (YA -YB) 2) * (AX 2 + (YA -YC) 2)) - ΔX 2 - (YA-YB) * (YA-YC)) / (ΔX * ((YA-YB) - (YA-YC))). ahol ΔX az X pont távolsága a pontok között (emlékszem arra, hogy pontunk egyenletesen eloszlik az X mentén). Az alábbiakban egy matematikai igazolás található a képlet helyességéről, de ha nem vagy a hangulatban, egyszerűen kihagyhatod.
A k együttható matematikai származtatása
(7) ∠DAC = ∠O2 CA = β - mint két párhuzamos (AD) és (O2 C) és secant (AC)
Szögletes zárójelekkel a szegmens hossza (nem akartam függőleges egyenes vonalakat használni - remélem, hogy az olvasó megbocsát nekem)
És így találtunk; b mi is tudjuk (lásd fent), és így a vonal, amelyen a támogatási pontok hazugság ismert nekünk.
Referenciapontokat keresünk
Egy kis matematika, ami bizonyítja
A trigonometria alapján emlékszünk arra, hogy:
Ha az [AC1] -et egyenlítjük a grafikon fő pontjainak X lépése felénél (B, A és C pont stb.), Akkor:
A kellemes!
Példa végrehajtás a JSFiddle-en