Kahden pisteen välinen "köysi"

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

Kahden pisteen välinen "köysi"

Post by Tuxi » Wed Oct 17, 2012 10:41 pm

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)

User avatar
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 » Thu Oct 18, 2012 1:42 am

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