Yritykseni on tehdä catmull splinestä nuoli, joka ohenee tasaisesti niin että alussa se olisi x pisteen levyinen ja lopussa y pisteen levyinen.
Siis tämän tapaisen:
http://img174.imageshack.us/img174/9691/
Olen kirjoittanut koodin, joka piirtää catmull splinen pisteiden perusteella ja piirtää sen kummallekkin puolelle toisen viivan.
Sivussa kulkevien viivojen pisteet lasken kaavalla:
$sX = $kX + ($vkY - $kY) $sY = $kY - ($vkX - $kX)
Jossa:
$sX ja $sY ovat sivussa kulkevan viivan pisteen kordinaatit.
$kX ja $kY ovat keskellä kulkevan viivan pisteen kordinaatit.
$vkX ja $ckY ovat keskellä kulkevan viivan edellisen pisteen kordinaatit.
Toisen sivuviivan kaavassa merkit vaihtuvat tyyliin:
$sX = $kX - ($vkY - $kY) $sY = $kY + ($vkX - $kX)
Tulos näyttää tältä: http://koti.mbnet.fi/petrinm/spline.php
Ongelma on se että sivussa olevat viivat paksunee ja ohenee, kun niiden tulisi pysyä saman paksuisena.
Syynä tähän on se että kahden määritetyn pisteen välille lasketaan tasan 100 välipistettä, joiden kautta spline kulkee. Tämän takia välipisteiden välinen etäisyys ei ole vakio ja viivojen välinen etäisyys muuttuu, koska sivuviivan välinen ja keskiviivaan etäisyys on suoraanverrannollinen välipisteiden väliseen etäisyyteen. (kts. äskeinen kaava)
Yritin ratkaista tätä laskemalla erilaisia suhdelukuja, joissa vertaillaan pisteiden etäisyyksiä, mutta sain vain vielä kummallisempia tuloksia.
Tähän kaikkeen pitäisi vielä sisällyttää tuo tasainen oheneminen.
Miten saan tämän toimimaan oikein?
Aihe on jo aika vanha, joten et voi enää vastata siihen.