Advertisement
MegaLoler

ball and line collision

Apr 2nd, 2011
112
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.34 KB | None | 0 0
  1. <html>
  2. <head>
  3. <script type="text/javascript">
  4.  
  5. function getInternetExplorerVersion()
  6. {
  7. var rv = -1; // Return value assumes failure.
  8. if (navigator.appName == 'Microsoft Internet Explorer')
  9. {
  10. var ua = navigator.userAgent;
  11. var re = new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})");
  12. if (re.exec(ua) != null)
  13. rv = parseFloat( RegExp.$1 );
  14. }
  15. return rv;
  16. }
  17. var IE = getInternetExplorerVersion();
  18.  
  19. var mx = 0;
  20. var my = 0;
  21. var pmx = 0;
  22. var pmy = 0;
  23.  
  24. if (IE==-1) document.captureEvents(Event.MOUSEMOVE)
  25. document.onmousemove = getMouseXY;
  26. var tempX = 0;
  27. var tempY = 0;
  28. function getMouseXY(e) {
  29. if (IE>=0) { // grab the x-y pos.s if browser is IE
  30. tempX = event.clientX + document.body.scrollLeft;
  31. tempY = event.clientY + document.body.scrollTop;
  32. }
  33. else { // grab the x-y pos.s if browser is NS
  34. tempX = e.pageX;
  35. tempY = e.pageY;
  36. }
  37. if (tempX < 0){tempX = 0;}
  38. if (tempY < 0){tempY = 0;}
  39. mx = tempX;
  40. my = tempY;
  41. if(mx<0){mx=0;}
  42. if(my<0){my=0;}
  43. return true;
  44. }
  45.  
  46.  
  47.  
  48. var ball = null;
  49. var d = null;
  50.  
  51. var lx = 50;
  52. var ly = 200
  53.  
  54. var x = 55;
  55. var y = 0;
  56. var xv = 0;
  57. var yv = 0;
  58. var xa = 0;
  59. var ya = 0;
  60.  
  61. var friction = 0;
  62. var bounce = 0.5;
  63.  
  64. var damping = 0;
  65. var gravity = 0.1;
  66.  
  67. var grab = false;
  68.  
  69. function init(){
  70. ball = document.getElementById("ball");
  71. d = document.getElementById("d");
  72. d.style.position="absolute";
  73. ball.style.position="absolute";
  74. line = document.getElementById("line");
  75. line.style.position="absolute";
  76. line.style.top = ly;
  77. line.style.left = lx;
  78. setInterval("loop();",100/6);
  79. }
  80. function loop(){
  81.  
  82. x1 = lx;
  83. y1 = ly;
  84. x2 = lx + 300;
  85. y2 = ly + 100;
  86.  
  87. dx = x - x1;
  88. dy = y - y1;
  89. dx2 = x2 - x1;
  90. dy2 = y2 - y1;
  91.  
  92. dp = dx*dx2 + dy*dy2;
  93. lensq = (dx2*dx2 + dy2*dy2)
  94.  
  95. projx = ( dp / lensq ) * dx2;
  96. projy = ( dp / lensq ) * dy2;
  97.  
  98. len = Math.sqrt(lensq);
  99.  
  100. if(projx < 0){projx = 0;}
  101. if(projy < 0){projy = 0;}
  102. if(projx > 300){projx = 300;}
  103. if(projy > 100){projy = 100;}
  104.  
  105. px = projx+lx;
  106. py = projy+ly;
  107.  
  108. d.style.left = px;
  109. d.style.top = py;
  110.  
  111. dx = x - px;
  112. dy = y - py;
  113. distance = Math.sqrt(dx*dx + dy*dy);
  114.  
  115. if(distance < 50){
  116.  
  117. pen = 50 - distance;
  118.  
  119. udx = dx/distance;
  120. udy = dy/distance;
  121.  
  122. x += udx * pen;
  123. y += udy * pen;
  124.  
  125. vlen = Math.sqrt(xv*xv + yv*yv);
  126. vux = xv/vlen;
  127. vuy = yv/vlen;
  128.  
  129. dp = vux*udx + vuy*udy;
  130. force = dp * vlen;
  131.  
  132. xa -= (force * udx) + (force * udx * bounce);
  133. ya -= (force * udy) + (force * udy * bounce);
  134.  
  135. }
  136.  
  137. ya += gravity;
  138.  
  139. if(x < 50){
  140. x = 50;
  141. xa += -xv * bounce - xv;
  142. }else if(x > 750){
  143. x = 750;
  144. xa += -xv * bounce - xv;
  145. }
  146. if(y < 50){
  147. y = 50;
  148. ya += -yv * bounce - xy;
  149. }else if(y > 750){
  150. y = 750;
  151. ya += -yv * bounce - yv;
  152. }
  153.  
  154. if(grab){
  155. xa = mx - pmx;
  156. ya = my - pmy;
  157. xv = 0;
  158. yv = 0;
  159. x = mx;
  160. y = my;
  161. }
  162.  
  163. xv += xa;
  164. yv += ya;
  165. xa = 0;
  166. ya = 0;
  167. x += xv;
  168. y += yv;
  169.  
  170. pmx = mx;
  171. pmy = my;
  172.  
  173. ball.style.top = y-50;
  174. ball.style.left = x-50;
  175. }
  176. </script>
  177. </head>
  178. <body onload="init();" onmouseup="grab = false;">
  179. <img width="300" height="100" src="http://www.assertivemagazine.com/wp-content/uploads/canvas-element/03-09_diagonal_line.png" id="line" onmousedown="return false;"></img>
  180. <img width="100" src="http://www.ozark.k12.mo.us/jrhi/cooks/redcircle.gif" id="ball" onmousedown="grab = true; return false;"></img>
  181. <img width="5" src="http://www.ozark.k12.mo.us/jrhi/cooks/redcircle.gif" id="d" onmousedown="return false;"></img>
  182. </body>
  183. </html>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement