Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Проверка столкновений одинаковых объектов / 25 сообщений из 27, страница 1 из 2
16.10.2019, 12:17
    #39876996
Jimy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка столкновений одинаковых объектов
Добрый день. Я совсем начинающий в JavaScript... Вот учусь.. Сделал простейшую анимацию - по canvas летает куча шариков и отскакивают от стенок. С этим справился А как отследить столкновения их между собой? типа столкнулись и разлетелись?
Спасибо!
...
Рейтинг: 0 / 0
16.10.2019, 12:26
    #39877005
fkthat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка столкновений одинаковых объектов
Если шариков дохрена, то тут датацентр отдельный нужен будет, чтобы рассчитать. :-))) Ну а так, как - отслеживать координаты, вычислять расстояния между центрами.
...
Рейтинг: 0 / 0
16.10.2019, 13:22
    #39877029
Jimy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка столкновений одинаковых объектов
А у меня их 20. Это дохрена?:) В общем, шарик - это объект. В массив запихиваются экземпляры этого объекта. Вылетают они по циклу, который перебирает массив, из одной точки (начальные координаты у всех одни), потом хаотично мечутся по экрану. Я понимаю, что надо сравнивать координаты. Могу узнать у конкретного ball[i]. А с чем сравнивать-то? И как?
...
Рейтинг: 0 / 0
16.10.2019, 13:50
    #39877056
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка столкновений одинаковых объектов
JimyА с чем сравнивать-то? И как?
С другими шариками...

А как я тебе ответил на другом форуме... На этом тебе ответил выше fkthat .
...
Рейтинг: 0 / 0
16.10.2019, 13:54
    #39877059
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка столкновений одинаковых объектов
JimyА у меня их 20. Это дохрена?:)
Зависит от быстродействия компа...

Количество итераций из 20 по 2
https://www.matburo.ru/tvart_sub.php?p=calc_C
...
Рейтинг: 0 / 0
16.10.2019, 13:59
    #39877062
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка столкновений одинаковых объектов
krvsaКоличество итераций из 20 по 2
Код: javascript
1.
2432902008176640000/(6402373705728000*2)=190


Т.ч. довольно быстро будет проверять...
Но проверять нужно после каждого "хода".
...
Рейтинг: 0 / 0
16.10.2019, 14:04
    #39877064
Jimy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка столкновений одинаковых объектов
С другими шариками. Понятно. Непонятно, как? Дайте идею. Мне не надо готовый код, подскажите хотя бы в общих чертах..
...
Рейтинг: 0 / 0
16.10.2019, 14:53
    #39877109
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка столкновений одинаковых объектов
JimyНепонятно, как? Дайте идею. Мне не надо готовый код, подскажите хотя бы в общих чертах..
Обычный цикл в цикле...

Дабы понять смысл любого алгоритма - упрости задачу. Например шаров всего 3 или 4. И погнал проверять пары
1 - 2
1 - 3
1 - 4
Потом
2 - 3
2 - 4
Далее
3 - 4

Понятен алгоритм? Или хотя бы идею ты понял?
...
Рейтинг: 0 / 0
16.10.2019, 14:55
    #39877110
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка столкновений одинаковых объектов
Jimy , тебе сколько лет? Какое образование имеешь?
Просто нужно знать с кем имеем дело...
...
Рейтинг: 0 / 0
16.10.2019, 15:01
    #39877118
Jimy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка столкновений одинаковых объектов
Идею понял. Спасибо. лет много:)
...
Рейтинг: 0 / 0
16.10.2019, 15:02
    #39877119
Jimy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка столкновений одинаковых объектов
лет много, поэтому и не догоняю:)
...
Рейтинг: 0 / 0
16.10.2019, 15:09
    #39877128
fkthat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка столкновений одинаковых объектов
krvsa,

А если три шара или больше сразу сталкиваются?
...
Рейтинг: 0 / 0
16.10.2019, 15:54
    #39877155
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка столкновений одинаковых объектов
fkthatА если три шара или больше сразу сталкиваются?
Да хоть все! Для алгоритма это без разницы...
Например будет известно, что столкнулись шары:
1 - 3
2 - 4
3 - 4
Тут нет никакого криминала. Столкнулись и столкнулись...
...
Рейтинг: 0 / 0
16.10.2019, 15:55
    #39877156
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка столкновений одинаковых объектов
Jimyлет много, поэтому и не догоняю:)
Ты уже пенс челе?
Образование какое?
Чем занимался до программирования?

Ты не думай, что тут только мальчишки сидят...
...
Рейтинг: 0 / 0
16.10.2019, 16:32
    #39877189
Jimy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка столкновений одинаковых объектов
Нет не "пенс". Но почти. До программирования... Лес валил.
...
Рейтинг: 0 / 0
17.10.2019, 07:15
    #39877399
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка столкновений одинаковых объектов
JimyДо программирования... Лес валил.
Тогда игрушки будет писать ооочень проблематично...
Там хватает математики и физики. Да и сами алгоритмы так же нужно уметь придумывать.

Ведь после проверки на пересечение окружностей тебе придется рассчитать в какие стороны будут разлетаться те шары. А это будет посложнее чем проверить пересечения...
...
Рейтинг: 0 / 0
17.10.2019, 07:22
    #39877400
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка столкновений одинаковых объектов
Jimy , вот нашел тебе статейку на тему соударения шаров... ;)
https://toster.ru/q/31059
...
Рейтинг: 0 / 0
18.10.2019, 09:16
    #39878014
Jimy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка столкновений одинаковых объектов
Вот соорудил... Но отскакивают как-то криво... То один, то два, то вообще никак... Может, подскажите, что не так?
(HTML файл не стал приводить, там один canvas черного фона и размерами 600 на 600.)

Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
var c=document.getElementById('canvas');
var ctx=c.getContext('2d');
ctx.strokeRect(0,0,600,600);

Ball=function(x,y,radius){
    this.x=x;
    this.y=y;
    this.radius=radius;
    this.xSpeed=RandomMinMax(-2,2)+0.1;
    this.ySpeed=RandomMinMax(-2,2)+0.1;
    this.drawlines=drawlines();
    ////////////////////////
    this.draw=function(){
    ctx.beginPath();
ctx.arc(this.x,this.y,this.radius,0,Math.PI*2,false);
                ctx.fillStyle='rgba(0,100,210,0.8)';
       
ctx.fill();
       
};
    ///////////////////////////
    this.move=function(){
             this.x=this.x+this.xSpeed;
        this.y=this.y-this.ySpeed;
           };
  this.checkCollision = function () {

 if (this.y < this.radius || this.y > 600-this.radius) {this.ySpeed = -this.ySpeed;
                                                     
                                                       }
    if (this.x>600-this.radius||this.x<this.radius ){this.xSpeed=-this.xSpeed;

                                                    };
   };
};
function RandomMinMax(min,max){
    return Math.floor(Math.random()*(max-min+1)+min);
};


/////////////////////////////////////
//ctx.clearRect(0,0,600,600);

var group=[];
for(var i=0;i<6;i++){
    var xBall=RandomMinMax(10,590);
var yBall=RandomMinMax(10,590);
    var RandomRadius=RandomMinMax(2,10);
    group.push(new Ball(xBall,yBall,20));

};
function drawlines(){
var x1,x2,y1,y2,lenth;
for (var i in group){
  for(var j in group){
      x1=group[i].x;
      y1=group[i].y;
      x2=group[j].x;
      y2=group[j].y;
      lenth=Math.sqrt(Math.pow(x2-x1,2)+Math.pow(y2-y1,2));
      if (lenth<40){
          ctx.lineWidth=0.5;
          ctx.strokeStyle='rgba(0,100,210,0.3)';
          ctx.beginPath();
          ctx.moveTo(x1,y1);
          ctx.lineTo(x2,y2);
          ctx.closePath();
          ctx.fillStyle='red';
          group[i].xSpeed=group[i].xSpeed*-1;
           group[i].ySpeed=group[i].ySpeed*-1;
          
          
          ctx.stroke();
      }
  } ; 
};
};

function animate(){
////////////////////////////
requestAnimationFrame(animate)
{
    ctx.clearRect(0,0,600,600);
    for(var i=0;i<group.length;i++){
    group[i].draw();
        group[i].move();
        group[i].checkCollision();
        drawlines();
    };
    
    ctx.strokeRect(0,0,600,600);
};
};
animate();
...
Рейтинг: 0 / 0
18.10.2019, 09:37
    #39878022
fkthat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка столкновений одинаковых объектов
Jimy,

У тебя как-то слишком все просто. На бильярде ты, похоже, не играешь :) Когда у тебя два шара одинаковой массы сталкиваются, то тебе надо провести линию между их центрами. По направлению вдоль этой линии они "обмениваются" скоростями. По направлению перпендикулярному этой линии они свои скорости сохраняют.
...
Рейтинг: 0 / 0
18.10.2019, 09:41
    #39878027
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка столкновений одинаковых объектов
fkthat,
ты , по аналогии с бильярдом, ещё посоветуй учитывать кручение шара ...
...
Рейтинг: 0 / 0
18.10.2019, 09:56
    #39878032
Jimy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка столкновений одинаковых объектов
А мне не надо ни массу, ни скорость. Мне просто проверить расстояние между ними и "развести" друг от друга. Без всякой физики. А вот как-то криво получается....
...
Рейтинг: 0 / 0
18.10.2019, 10:00
    #39878034
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка столкновений одинаковых объектов
Jimy , двойной цикл не правильно организован... Для проверки не нужно крутить циклы от начала и до конца.
...
Рейтинг: 0 / 0
18.10.2019, 10:01
    #39878035
fkthat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка столкновений одинаковых объектов
JimyА мне не надо ни массу, ни скорость. Мне просто проверить расстояние между ними и "развести" друг от друга. Без всякой физики. А вот как-то криво получается....
Что значит "развести"? "Шары, разойдись", что ли?
...
Рейтинг: 0 / 0
18.10.2019, 10:06
    #39878040
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка столкновений одинаковых объектов
JimyМне просто проверить расстояние между ними и "развести" друг от друга. Без всякой физики. А вот как-то криво получается....
Без физики и геометрии будет, как раз, коряво.
...
Рейтинг: 0 / 0
18.10.2019, 10:17
    #39878049
Jimy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка столкновений одинаковых объектов
"Развести" значит поменять направление движения на противоположное. Ну или любое другое, чтобы был эффект отскока. В любую сторону.
А может, подскажите, как правильно организовать цикл для проверки? Что значит не до конца крутить?
...
Рейтинг: 0 / 0
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Проверка столкновений одинаковых объектов / 25 сообщений из 27, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]