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

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

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


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

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

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

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

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

Ведь после проверки на пересечение окружностей тебе придется рассчитать в какие стороны будут разлетаться те шары. А это будет посложнее чем проверить пересечения...
...
Рейтинг: 0 / 0
Проверка столкновений одинаковых объектов
    #39877400
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Jimy , вот нашел тебе статейку на тему соударения шаров... ;)
https://toster.ru/q/31059
...
Рейтинг: 0 / 0
Проверка столкновений одинаковых объектов
    #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
Проверка столкновений одинаковых объектов
    #39878022
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Jimy,

У тебя как-то слишком все просто. На бильярде ты, похоже, не играешь :) Когда у тебя два шара одинаковой массы сталкиваются, то тебе надо провести линию между их центрами. По направлению вдоль этой линии они "обмениваются" скоростями. По направлению перпендикулярному этой линии они свои скорости сохраняют.
...
Рейтинг: 0 / 0
Проверка столкновений одинаковых объектов
    #39878027
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthat,
ты , по аналогии с бильярдом, ещё посоветуй учитывать кручение шара ...
...
Рейтинг: 0 / 0
Проверка столкновений одинаковых объектов
    #39878032
Jimy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А мне не надо ни массу, ни скорость. Мне просто проверить расстояние между ними и "развести" друг от друга. Без всякой физики. А вот как-то криво получается....
...
Рейтинг: 0 / 0
Проверка столкновений одинаковых объектов
    #39878034
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Jimy , двойной цикл не правильно организован... Для проверки не нужно крутить циклы от начала и до конца.
...
Рейтинг: 0 / 0
Проверка столкновений одинаковых объектов
    #39878035
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JimyА мне не надо ни массу, ни скорость. Мне просто проверить расстояние между ними и "развести" друг от друга. Без всякой физики. А вот как-то криво получается....
Что значит "развести"? "Шары, разойдись", что ли?
...
Рейтинг: 0 / 0
Проверка столкновений одинаковых объектов
    #39878040
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JimyМне просто проверить расстояние между ними и "развести" друг от друга. Без всякой физики. А вот как-то криво получается....
Без физики и геометрии будет, как раз, коряво.
...
Рейтинг: 0 / 0
Проверка столкновений одинаковых объектов
    #39878049
Jimy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"Развести" значит поменять направление движения на противоположное. Ну или любое другое, чтобы был эффект отскока. В любую сторону.
А может, подскажите, как правильно организовать цикл для проверки? Что значит не до конца крутить?
...
Рейтинг: 0 / 0
Проверка столкновений одинаковых объектов
    #39878055
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Jimy"Развести" значит поменять направление движения на противоположное. Ну или любое другое, чтобы был эффект отскока.
Так я тебе и объяснил, как это сделать (при допущении идеально упругих шаров и отсутствия трения). Ты правильно сделать не хочешь, а потом удивляешься, что "что-то у меня коряво".
...
Рейтинг: 0 / 0
Проверка столкновений одинаковых объектов
    #39878184
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JimyА может, подскажите, как правильно организовать цикл для проверки?
Я ведь тебе даже ссылки с примерами давал...
На циферках показывал как нужно делать проверку, тут в теме выше...

JimyЧто значит не до конца крутить?
У тебя есть некое количество элементов... У тебя оба цикла проходят по этим элементам от первого до последнего, а это лишние итерации.
...
Рейтинг: 0 / 0
27 сообщений из 27, показаны все 2 страниц
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Проверка столкновений одинаковых объектов
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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