Programming C, C++, Java, PHP, Ruby, Turing, VB
Computer Science Canada 
Programming C, C++, Java, PHP, Ruby, Turing, VB  

Username:   Password: 
 RegisterRegister   
 Formula for checking points in a cirumference?
Index -> Programming, Turing -> Turing Help
View previous topic Printable versionDownload TopicSubscribe to this topicPrivate MessagesRefresh page View next topic
Author Message
Paul




PostPosted: Sat Apr 03, 2004 6:47 pm   Post subject: Formula for checking points in a cirumference?

Im looking for the formula that can check the coordinates on any/all points on the circumference on a circle, it was vaguely mentioned in the tutorials section (?) I dunno, I need it so that the ball when it hits the corner of the paddle, it bounces, checking only vertical and horizontal axis won't work, so far Im using this and it works:
code:

    if BallX + 11 <= PaddleX + PaddleLength and BallX - 11 >= PaddleX and BallY - 11 <= PaddleY + PaddleWidth then
        incY := -incY
        score += 5
%This part is to check if it has hit the edge
elsif BallX-11 < PaddleX+PaddleLength and BallX-11 > PaddleX and BallY-11 > PaddleY and BallY-11<PaddleY+PaddleWidth then
incX:=-incX
incY:=-incY
elsif BallX+11 < PaddleX+PaddleLength and BallX+11 > PaddleX and BallY-11 > PaddleY and BallY-11<PaddleY+PaddleWidth then
incX:=-incX
incY:=-incY
end if

is there a formula for this?
and while Im on the subject, 2 questions,
why does the ball flash and the paddle doesn't, and why when you loose a life, when I use getch, it doesn't run the cls, eventhough the getch is after the cls? I thought getch pauses the program.
heres my program



paddleball.t
 Description:
paddleball

Download
 Filename:  paddleball.t
 Filesize:  2.26 KB
 Downloaded:  76 Time(s)

Sponsor
Sponsor
Sponsor
sponsor
zylum




PostPosted: Sat Apr 03, 2004 7:01 pm   Post subject: (No subject)

to solve you blinking problem, have the View.Update at the end of the main loop and remove the other ones... also remove the code which draws white over the last positions of the ball and paddle and instead add a cls after the View.update...

code:
setscreen ("graphics: 400, 500")
setscreen ("offscreenonly")
setscreen ("noecho")
var PaddleX, PaddleY : int := 11
var BallX, BallY : int := 50
var incX, incY : int := 3
var score, lives : int := 0
var chars : array char of boolean
var anykey : string (1)
var PaddleLength, PaddleWidth := 76
PaddleWidth := 15
proc border
    drawbox (0, 0, maxx, maxy, black)
    drawbox (10, 10, maxx - 10, maxy - 10, black)
    drawfill (5, 5, 12, black)
end border

proc drawPaddle
    drawfillbox (PaddleX, PaddleY, PaddleX + 75, PaddleY + PaddleWidth, 43)
    drawbox (PaddleX - 1, PaddleY - 1, PaddleX + 76, PaddleY + 16, black)
end drawPaddle

proc movePaddle
    Input.KeyDown (chars)
    if chars (KEY_LEFT_ARROW) and PaddleX - 2 > 0 then
        PaddleX -= 4
    elsif chars (KEY_RIGHT_ARROW) and PaddleX + 77 < maxx then
        PaddleX += 4
    end if

end movePaddle

proc Drawball
    drawoval (BallX, BallY, 10, 10, black)
    drawfilloval (BallX, BallY, 9, 9, 12)
end Drawball

proc Moveball
    BallX += incX
    BallY += incY
    delay (7)
end Moveball
lives := 3
proc checkBall
    if BallX + 11 >= maxx or BallX - 11 < 0 then
        incX := -incX
    end if
    if BallY - 11 <= 0 or BallY + 11 >= maxy then
        incY := -incY
    end if
    if BallY - 11 <= 0 then
        lives -= 1
        cls
        put "Press AnyKey"
        getch (anykey)
        cls
        BallX := maxx div 2
        BallY := maxy div 2
    end if
    if BallX + 11 <= PaddleX + PaddleLength and BallX - 11 >= PaddleX and BallY - 11 <= PaddleY + PaddleWidth then
        incY := -incY
        score += 5

    elsif BallX - 11 < PaddleX + PaddleLength and BallX - 11 > PaddleX and BallY - 11 > PaddleY and BallY - 11 < PaddleY + PaddleWidth then
        incX := -incX
        incY := -incY
    elsif BallX + 11 < PaddleX + PaddleLength and BallX + 11 > PaddleX and BallY - 11 > PaddleY and BallY - 11 < PaddleY + PaddleWidth then
        incX := -incX
        incY := -incY
    end if
end checkBall

proc scoreshow
    locate (1, 1)
    put "Score: ", score, " Lives: ", lives
end scoreshow

loop
    drawPaddle
    Drawball
    Moveball
    movePaddle
    checkBall
    if lives < 0 then
        exit
    end if
    scoreshow
    View.Update
    cls
end loop
put "Your score: ", score


and as for the collision detection, if you want really accurate collision detection the i suggest you use the quadratic formula... if you need help with it i'll try to explain, but it's sort of hard to use with collision detection Confused

-zylum
Paul




PostPosted: Sat Apr 03, 2004 7:06 pm   Post subject: (No subject)

would you explain the formula please? Very Happy
recneps




PostPosted: Sat Apr 03, 2004 8:00 pm   Post subject: (No subject)

well if you mean all the points on a circle, then isnt that technically my "circlify"? Smile just change the drawdot to whatever command needed, it goes through the whole screen checking if the dot fits the circle's equation (x,y,and radius)
If not then i misunderstood Wink
Paul




PostPosted: Fri Apr 09, 2004 4:10 pm   Post subject: (No subject)

waa? I completely missed what your saying, how does it apply to my paddleball (in which I called the inperfect collision detection a cheat "feature")
recneps




PostPosted: Fri Apr 09, 2004 7:06 pm   Post subject: (No subject)

well you could use what i was saying on the ball, then, if:
dot>one corner of paddle and < other corner of paddle then collision happened, and reverse direction.
The other one workds just as fine, but thats what im interpreting that you needed
Paul




PostPosted: Fri Apr 09, 2004 7:23 pm   Post subject: (No subject)

thats what I used, but there are still minor glitches happening. the ball still slips thru some times.
gamer




PostPosted: Fri Apr 09, 2004 7:29 pm   Post subject: (No subject)

i hav a similar problem too......how should we fix this?
Sponsor
Sponsor
Sponsor
sponsor
gamer




PostPosted: Sat Apr 10, 2004 6:18 pm   Post subject: (No subject)

please help!!

anyone??
equs




PostPosted: Sat Apr 17, 2004 1:39 pm   Post subject: (No subject)

the quadratic formaul is
-b +/- sqrt b squared - 4ac / 2a
sqrt everything after the -b and you have to do both equations for 2 points. The plus and - answer.
zylum




PostPosted: Sat Apr 17, 2004 9:43 pm   Post subject: (No subject)

the formula is the easy part... making an equation that uses the velocity of the ball, the velocity of the paddle and the positions of the ball and paddle to find the time of the collision.... if the time is less than 1 then the collision took place.... otherwise the collision didnt take place... if a collision does take place you multiply the velocty by the time ( < 1 ) and add it to the position and something like that and update the position of the ball and paddle... meh it's something pretty complex but its THE most accurate collision detection... i rember reading it somewhere and trying to implelemt it in one of my flash projects but it was pretty difficult..

-zylum
Display posts from previous:   
   Index -> Programming, Turing -> Turing Help
View previous topic Tell A FriendPrintable versionDownload TopicSubscribe to this topicPrivate MessagesRefresh page View next topic

Page 1 of 1  [ 11 Posts ]
Jump to:   


Style:  
Search: