Tas būtu lokana līnija caur dotiem punktiem plaknē. Punktus liekam secīgi. Protams, teorijā pastāv dažādi splainu tipi, bet mēs zīmēsim vienkāršu un puslīdz vizuāli pieņemamu. Nelietosim kubiskos vai Bezier. Mūsu splains būs tipa B-spline (bāzes). Nepretendējam uz izcilāko.
Sadalam uzdevumu divās daļās
1.daļa Izveidojam kurvi.
Daram tā: caur katru punktu, sākot no otrā, velkam zaļu nogrieznīti-pieskari
paraleli taisnei, kas ietu caur blakus esošiem punktiem (pirms un pēc).
Sanāks labs liekums punktā. Garumu nogrieznim samazinam, tik garu nevajag. Var mainīt arī leņķi, ja tā labāk izskatās.
Savienojam nogriežņus (oranžā līnija).
Tagad par kurvi nodefinējam visus sazīmētos nogriežņus (zilos),
sadalot 4 daļās starp punktiem. Pirmo un pēdējo var atstāt 2 daļās, lai tik pāra skaits.
2.daļa Zīmējam liekto līniju.
Ik pa 2 kurvja nogriežņiem zīmējam līniju. Skatīt zīm.1 lejā. Nogriežņi palīdz matemātiski rēķinot punktu koordinātas.
Zemāk piedāvāta matemātiska metode.
Lagranža metode
Ir vienkāršs veids kā uzzīmēt līniju caur punktiem - ļoti matemātisks. Vajag zināt funkciju katrā intervālā starp blakus esošiem punktiem, un šai funkcijas līknei "jāturpinās". Zinātne apraksta kā šīs funkcijas izrēķināt. Metodes ir daudz ar visādu koeficientu aprēķināšanu, var sanākt milzu skaitļi un vienādojumi. Atšķiras arī zīmējumi.
Bet Lagranža metode ir ļoti vienkārša un īsa. Sekojošā programma darbojas kā melnā kaste, padod tik punktus un beisiks uzzīmēs.
const Xmax = 640 const Ymax = 480 ' Definējam 10 punktus plaknē, vilksim cauri splainu N=10 ' punktu (x,y) dim Px(N), Py(N) for i=1 to N ' vienmērīgi izlīdzinām punktus plaknē Px(i)=Xmax/N * i ' piemeklējam kaut kādu Y katram Py(i)=Ymax/2 + (1-(rnd*2)) * sin(i*5)* Ymax/4 ' uzzīmējam punktu Circle Px(i),Py(i),2 next i '--------- ' Tagad vilksim splainu caur mūsu punktiem ' ar Lagranža metodi '--------- ' Ņemsim visus x plaknē starp visiem punktiem ' un interpolēsim punktu Y ' for X=Px(1) to Px(N) step 0.02 Y=0 for k=1 to N F=1 for j=1 to N if j<>k then F *= (x-Px(j))/(Px(k)-Px(j)) next j Y += F*Py(k) next k ' zīmējam punktu Pset X,Y,2 next X
Autobraucēja metode
Šī ir manis piedavātā metode, gluži kā auto brauc pa trasi. Sasniedzot punktus, sabremzējas un izņem līkumus, piedod gāzi un dodas uz nākamo kontrolpunktu. Tomēr tas nav oficiāls splains, kaut arī līdzīgs.
Nav komentāru:
Ierakstīt komentāru