Kirjautuminen

Haku

Tehtävät

Keskustelu: Yleinen keskustelu: Spline-ongelma

petrinm [23.03.2008 12:33:51]

#

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/arrowxt4.png

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?

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta