Page 1 of 1

Kahden pisteen välinen "köysi"

Posted: Wed Oct 17, 2012 10:41 pm
by Tuxi
Tarvitsisin sivustapäin kuvattuun peliin funktion, joka piirtää tietyn pituisen viivan kahden pisteen välille. Köyden pitää siis olla kiinni molemmissa pisteissä, ja sen pitäisi muodostaa ikään kuin riippusilta pisteiden välille. Molempia pisteitä sekä köyden pituutta pitäisi pystyä muuttamaan reaaliajassa. Miten tällaista funktiota kannattaisi ruveta toteuttamaan? (Suunnittelin että köysi olisi paraabelin muotoinen, mutta tällöin kaaren pituuden määrittäminen integraalilla meni aivan liian monimutkaiseksi)

Re: Kahden pisteen välinen "köysi"

Posted: Thu Oct 18, 2012 1:42 am
by koodaaja
Esimerkiksi jousijärjestelmällä:

Code: Select all

SCREEN 640, 480

Const amount = 99
Dim points#(amount, 3)

For i = 0 To amount
    points(i, 0) = 320+i*100.0/amount
    points(i, 1) = 240
Next i

plen# = 100.0/amount
k# = 2.0

PositionMouse 420, 240
Repeat
    plen = plen + (KeyDown(200)-KeyDown(208))*.1
    For k = 0 To 9
        For i = 0 To amount-1
            xd# = points(i,0)-points(i+1,0)
            yd# = points(i,1)-points(i+1,1)
            d# = Sqrt(xd*xd+yd*yd)
            d = -(d-plen)*k/d
            points(i  ,2) = points(i  ,2)+xd*d
            points(i  ,3) = points(i  ,3)+yd*d
            points(i+1,2) = points(i+1,2)-xd*d
            points(i+1,3) = points(i+1,3)-yd*d
        Next i
        For i = 0 To amount
            points(i,0) = points(i,0)+points(i,2)*.002
            points(i,1) = points(i,1)+points(i,3)*.002
            points(i,2) = points(i,2)*.995
            points(i,3) = points(i,3)*.995+.5
        Next i
        points(0,0) = 320
        points(0,1) = 240
        points(amount,0) = MouseX()
        points(amount,1) = MouseY()
    Next k
    Lock
        For i= 0 to amount-1
            Line points(i,0), points(i,1), points(i+1,0), points(i+1,1)
        Next i
    Unlock
    DrawScreen
Forever