Computer Science Canada Formula for checking points in a cirumference?

Author:  Paul [ 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 PaddleX and BallY-11 > PaddleY and BallY-11

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

Author:  zylum [ Sat Apr 03, 2004 7:01 pm ]
Post 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

-zylum

 Author: Paul [ Sat Apr 03, 2004 7:06 pm ] Post subject: would you explain the formula please?

 Author: recneps [ Sat Apr 03, 2004 8:00 pm ] Post subject: well if you mean all the points on a circle, then isnt that technically my "circlify"? 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

 Author: Paul [ Fri Apr 09, 2004 4:10 pm ] Post 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")

 Author: recneps [ Fri Apr 09, 2004 7:06 pm ] Post 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

 Author: Paul [ Fri Apr 09, 2004 7:23 pm ] Post subject: thats what I used, but there are still minor glitches happening. the ball still slips thru some times.

 Author: gamer [ Fri Apr 09, 2004 7:29 pm ] Post subject: i hav a similar problem too......how should we fix this?

 Author: gamer [ Sat Apr 10, 2004 6:18 pm ] Post subject: please help!! anyone??

 Author: equs [ Sat Apr 17, 2004 1:39 pm ] Post 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.

 Author: zylum [ Sat Apr 17, 2004 9:43 pm ] Post 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

 :