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