Kahden pisteen välinen "köysi"

Voit pyytää apua ohjelmointiongelmiin täältä.
Post Reply
Tuxi
Active Member
Posts: 190
Joined: Wed Jan 21, 2009 10:25 pm
Contact:

Kahden pisteen välinen "köysi"

Post 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)
Projektit:
Jotain pientä (Ehkä vähän suurempaakin)

-Tuxi- (myös Tuxi4321)
koodaaja
Moderator
Moderator
Posts: 1583
Joined: Mon Aug 27, 2007 11:24 pm
Location: Otaniemi - Mikkeli -pendelöinti

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

Post 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
Post Reply