Advertisement
Guest User

Untitled

a guest
Jun 19th, 2019
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.27 KB | None | 0 0
  1. function iterate() {
  2. context.clearRect(0, 0, canvas.width, canvas.height);
  3. let detections = 0;
  4. if (mouseIsDown) {
  5. let velocityX = Math.random() * (100 + 50) + -50;
  6. let velocityY = Math.random() * (100 + 50) + -50;
  7. let x = mouseX;
  8. let y = mouseY;
  9. let r = 10.0;
  10. if (x + r > canvas.width) {
  11. let change = (x + r) - canvas.width;
  12. x -= change;
  13. } else if (x - r < 0) {
  14. let change = Math.abs(x - r);
  15. x += change;
  16. }
  17. if (y + r > canvas.height) {
  18. let change = (y + r) - canvas.height;
  19. y -= change;
  20. } else if (y - r < 0) {
  21. let change = Math.abs(y - r);
  22. y += change;
  23. }
  24. balls.push(new ball(x, y, r, velocityX, velocityY));
  25. }
  26. let quadTree = new QuadTree(boundaryAABB);
  27. for (let c of balls) {
  28. c.isColided = false;
  29. quadTree.insert(c);
  30. }
  31. for (let c of balls) {
  32. let searchedAABB = new AABB(c.x, c.y, c.r + 1);
  33. let foundballs = quadTree.queryRange(searchedAABB);
  34. for (let fb of foundballs) {
  35. if (c == fb) {
  36. continue;
  37. }
  38. detections++;
  39. if (c.intersects(fb)) {
  40. c.isColided = true;
  41. fb.isColided = true;
  42. break;
  43. }
  44. }
  45. }
  46. quadTree.draw(context, drawGridCheckbox.checked);
  47. d = new Date();
  48. changeTimeS = (d.getTime() / 1000.0) - lastTimeS;
  49. lastTimeS = d.getTime() / 1000.0;
  50. for (let c of balls) {
  51. let nextX = c.x + c.velocityX * changeTimeS;
  52. let nextY = c.y - c.velocityY * changeTimeS;
  53. if (nextX - c.r <= 0 || nextX + c.r >= canvas.width) {
  54. c.velocityX *= -1;
  55. c.x += c.velocityX * changeTimeS;
  56. } else {
  57. c.x = nextX;
  58. }
  59. if (nextY - c.r <= 0 || nextY + c.r >= canvas.height) {
  60. c.velocityY *= -1;
  61. c.y -= c.velocityY * changeTimeS;
  62. } else {
  63. c.y = nextY;
  64. }
  65. }
  66. ballCounter.textContent = balls.length;
  67. detectionCounter.textContent = detections;
  68. bruteforceCounter.textContent = Math.pow(balls.length, 2);
  69. ratio.textContent=Math.round((Math.pow(balls.length, 2)-detections)/(detections))
  70. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement