Задать вопрос
  • Cимуляция движения тела по орбите?

    lastuniverse
    @lastuniverse Автор вопроса
    Может при какой-то скорости эллипс станет неотличим от окружности.

    так и происходить, но нужен механизм, который позволит получить эту скорость для произвольных масс телл и произвольной высоты орбиты без участия человека и визуальной оценки. Такой механизм есть - это расчет первой космической скорости, но в симуляции это почемуто работает несколько неправильно. Ищу причину)
  • Cимуляция движения тела по орбите?

    lastuniverse
    @lastuniverse Автор вопроса
    Robur, RAX7, Griboks, Антон Швец, вы все несомненно правы, но:

    Robur.
    ожидаемый результат - движение тела по эллиптической орбите.
    Все тела в космосе так и летают.
    Более того, даже этот сдвиг эллипса на каждом круге - это то что происходит в реальности.


    Так то оно так, но у меня по факту расчет идет для идеально круглого тела, относительно точечного центра гравитации. Учитывая это, орбита все таки должна получится круглой. Далее, если шаг итерации делать меньше, то и орбита скругляется. По сути на лицо факт неточности вычислений, причиной которой являются следующие факторы:
    1. неточность вычислений заложенных в сам механизм хранения значений с плавающей запятой;
    2. неточность вычислений за счет достаточно большого шага на каждой итерации вычислений;
    А вопрос мой по сути заключается не в том, как избавится от данных неточностей или уменьшить их (без существенного увеличения вычислительной нагрузки этого сделать нельзя) а в том, как добиться уменьшения их влияния на получаемую орбиту. Самый просто вариант, просто перемещать объект по фиксированной окружности с рассчитанной для этой окружности скоростью, но он мне не подходит по ряду причин:
    1. мне нужно чтобы тела двигались по законам приближенным к физическим.
    2. при добавлении источников гравитации, движение тел должно их учитывать

    Griboks,
    в первом приближении да, это шар. Я думаю, речь идёт об идеальном случае, когда существует только сила притяжения и только для тела (масса и размеры тела пренебрежимо малы) + начальное ускорение.

    Именно так. Именно для таких условий мне нужно добиться (хотя бы визуально) идеальной окружности, для любой высоты орбиты и тел с любой массой

    Антон Швец,
    И автор рассчитывает ее, только у него G равно единице, хотя она конечно потом в расчете силы притяжения тоже участвует.
    В общем надо аккуратно все проверять, времени столько нет :)
    Вектор движения вот странно как-то рассчитывается, и на глаз видно что тело летит криво изначально


    Ну, сама по себе гравитационная постоянная тут на кривизну орбиты влиять вообще не должна. А так да, изначально орбита искривляется после первой итерации. Перепроверил логику вычислений раз 100500 но ошибки так и не нашел. Если все же поможете выловить причину искривления, буду очень благодарен.
  • Че не так с кодом?

    lastuniverse
    @lastuniverse
    Afafks123132132165, когда допилите свою игру (ну или что вы там делаете) не забудьте в ней указать: "99.9% написано сообществом Тостера)))"
  • Почему данный код работает неправильно?

    lastuniverse
    @lastuniverse
    Afafks123132132165, крайне рекомендую разобраться с вариантом от twobomb
  • Почему данный код работает неправильно?

    lastuniverse
    @lastuniverse
    Afafks123132132165, а еще лучше отвлекитесь от своей задачи и по релаксируйте ))))
  • Почему данный код работает неправильно?

    lastuniverse
    @lastuniverse
    Afafks123132132165, потому что вы намудрили непонятно что:
    1. переменная j у вас и тут for(j = 0;j < 1000;j++){...} и во вложенном цикле (for(j in blocks){...}
    2. соответственно переменная range у вас не длинна луча а index блока в массиве
    3. вы создали в лучах переменную stop и вынужденны обнулять ее в отдельном цикле for(j in blocks){...}
    4. переменная range тоже нафиг не нужна. Пользуйтесь оператором выхода из цикла break. Это во первых уменьшит количество итераций по циклам for(j = 0;j < 1000;j++){...} и for(j in blocks){...} а во вторых избавит от необходимости запоминать значение длинны луча в range, и как следствие вам не надо будет пересчитывать отдельно концы лучей.
    5. ну и вместо setInterval используйте requestAnimationFrame, это уберет подвисания графики

    в общем вот вам исправленная версия вашего кода, дивитесь и разбирайтесь
  • Почему данный код работает неправильно?

    lastuniverse
    @lastuniverse
    Afafks123132132165, возмите мой вариант, там работает с любым количеством блоков
  • Почему данный код работает неправильно?

    lastuniverse
    @lastuniverse
    Afafks123132132165, я ваш цикл по блокам заменил на метод массивов SOME. посмотрите его описание
    Если в кратце, то some - перебирающий массив метод. Вызываемый у массива (в вашем случае blocks) и принимающий в качестве аргумента функцию - обработчик, которая последовательно будет вызываться для каждого элемента массива до тех пор пока не дойдет до конца массива или не вернет true.

    Заменил для того, что по логике, если блоков несколько, то условием прекращение трассировки луча является столкновение с любым из блоков, то есть при столкновении далее трассировку производить не нужно, а соответственно и сравнивать луч с другими блоками тоже.
  • Почему данный код работает неправильно?

    lastuniverse
    @lastuniverse
    Николай Чуприк, для тех кто реально может помочь в вопросе и без комментариев все понятно. Но следуя правилам хорошего тона комментарии к коду бы не помешали)
  • Почему данный код работает неправильно?

    lastuniverse
    @lastuniverse
    вернее, вы правы, но он еще забыл дописать && rays[i].x <= blocks[q].x
  • Почему данный код работает неправильно?

    lastuniverse
    @lastuniverse
    нет, у него там условие не верное)))

    у него:
    rays[i].x == blocks[q].x && rays[i].y >= blocks[q].y && rays[i].y <= blocks[q].y + 32


    а должно быть:
    rays[i].x>=blocks[q].x && rays[i].x <= blocks[q].x + 32 && rays[i].y >= blocks[q].y && rays[i].y <= blocks[q].y + 32
  • Как сделать поиск переменной?

    lastuniverse
    @lastuniverse
    чем вас для этой задачи не устраивают радиокнопки?
  • Где найти материал изучения MongoDB и node JS?

    lastuniverse
    @lastuniverse
    нода это все тот же js, посему основы учить тут https://learn.javascript.ru/
    но так как нода это js серверный, то в нем недоступны web api и вместо них имеется множество API нацеленных на взаимодействие с серверным железом, файловой системой и прочим, с которыми можно ознакомится тут https://nodejs.org/api/

    взаимодействовать с монгой можно как напрямую, через специальный модуль https://metanit.com/web/nodejs/6.1.php , так и через различные ODM, например https://metanit.com/web/nodejs/6.6.php
  • Как написать алгоритм вычисления почти линейного коэффициента поправки показаний сенсора?

    lastuniverse
    @lastuniverse
    пример на js, на с++ сами переделаете:
    // исходные данные
    const cap = [100, 123, 155, 168, 202, 230, 249, 277, 300 ];
    const volt = [100, 125, 150, 175, 200, 225, 250, 275, 300 ];
    
    // вольты в попугаи. Используем линейную интерполяцию. 
    // работает только в диапазоне представленном массивом volt
    function volt_to_cap(value){
        var result = undefined;
        for(var i=0; i<volt.length-1; i++){
           if( value>=volt[i] && value<volt[i+1] ){
              var size_x = volt[i+1] - volt[i];
              var cur_x = value - volt[i];
              var x = cur_x/size_x;
    
              var size_y = cap[i+1] - cap[i];
              var y = size_y * x;
              result = cap[i] + y;
              break;
           }
        }
        
        return result;
    }
    
    // используем
    for(var x=100; x<300; x+=1 ){
        var parrot = volt_to_cap(x);
        console.log("volt:",x," \t cup:",parrot);
    }


    выхлоп в консоль
    volt: 100  	 cup: 100
    volt: 101  	 cup: 100.92
    volt: 102  	 cup: 101.84
    volt: 103  	 cup: 102.76
    volt: 104  	 cup: 103.68
    volt: 105  	 cup: 104.6
    volt: 106  	 cup: 105.52
    volt: 107  	 cup: 106.44
    volt: 108  	 cup: 107.36
    volt: 109  	 cup: 108.28
    volt: 110  	 cup: 109.2
    volt: 111  	 cup: 110.12
    volt: 112  	 cup: 111.03999999999999
    volt: 113  	 cup: 111.96000000000001
    volt: 114  	 cup: 112.88
    volt: 115  	 cup: 113.8
    volt: 116  	 cup: 114.72
    volt: 117  	 cup: 115.64
    volt: 118  	 cup: 116.56
    volt: 119  	 cup: 117.48
    volt: 120  	 cup: 118.4
    volt: 121  	 cup: 119.32
    volt: 122  	 cup: 120.24
    volt: 123  	 cup: 121.16
    volt: 124  	 cup: 122.08
    volt: 125  	 cup: 123
    volt: 126  	 cup: 124.28
    volt: 127  	 cup: 125.56
    volt: 128  	 cup: 126.84
    volt: 129  	 cup: 128.12
    volt: 130  	 cup: 129.4
    volt: 131  	 cup: 130.68
    volt: 132  	 cup: 131.96
    volt: 133  	 cup: 133.24
    volt: 134  	 cup: 134.52
    volt: 135  	 cup: 135.8
    volt: 136  	 cup: 137.08
    volt: 137  	 cup: 138.36
    volt: 138  	 cup: 139.64
    volt: 139  	 cup: 140.92000000000002
    volt: 140  	 cup: 142.2
    volt: 141  	 cup: 143.48
    volt: 142  	 cup: 144.76
    volt: 143  	 cup: 146.04
    volt: 144  	 cup: 147.32
    volt: 145  	 cup: 148.6
    volt: 146  	 cup: 149.88
    volt: 147  	 cup: 151.16
    volt: 148  	 cup: 152.44
    volt: 149  	 cup: 153.72
    volt: 150  	 cup: 155
    volt: 151  	 cup: 155.52
    volt: 152  	 cup: 156.04
    volt: 153  	 cup: 156.56
    volt: 154  	 cup: 157.08
    volt: 155  	 cup: 157.6
    volt: 156  	 cup: 158.12
    volt: 157  	 cup: 158.64
    volt: 158  	 cup: 159.16
    volt: 159  	 cup: 159.68
    volt: 160  	 cup: 160.2
    volt: 161  	 cup: 160.72
    volt: 162  	 cup: 161.24
    volt: 163  	 cup: 161.76
    volt: 164  	 cup: 162.28
    volt: 165  	 cup: 162.8
    volt: 166  	 cup: 163.32
    volt: 167  	 cup: 163.84
    volt: 168  	 cup: 164.36
    volt: 169  	 cup: 164.88
    volt: 170  	 cup: 165.4
    volt: 171  	 cup: 165.92
    volt: 172  	 cup: 166.44
    volt: 173  	 cup: 166.96
    volt: 174  	 cup: 167.48
    volt: 175  	 cup: 168
    volt: 176  	 cup: 169.36
    volt: 177  	 cup: 170.72
    volt: 178  	 cup: 172.08
    volt: 179  	 cup: 173.44
    volt: 180  	 cup: 174.8
    volt: 181  	 cup: 176.16
    volt: 182  	 cup: 177.52
    volt: 183  	 cup: 178.88
    volt: 184  	 cup: 180.24
    volt: 185  	 cup: 181.6
    volt: 186  	 cup: 182.96
    volt: 187  	 cup: 184.32
    volt: 188  	 cup: 185.68
    volt: 189  	 cup: 187.04
    volt: 190  	 cup: 188.4
    volt: 191  	 cup: 189.76
    volt: 192  	 cup: 191.12
    volt: 193  	 cup: 192.48
    volt: 194  	 cup: 193.84
    volt: 195  	 cup: 195.2
    volt: 196  	 cup: 196.56
    volt: 197  	 cup: 197.92000000000002
    volt: 198  	 cup: 199.28
    volt: 199  	 cup: 200.64
    volt: 200  	 cup: 202
    volt: 201  	 cup: 203.12
    volt: 202  	 cup: 204.24
    volt: 203  	 cup: 205.36
    volt: 204  	 cup: 206.48
    volt: 205  	 cup: 207.6
    volt: 206  	 cup: 208.72
    volt: 207  	 cup: 209.84
    volt: 208  	 cup: 210.96
    volt: 209  	 cup: 212.08
    volt: 210  	 cup: 213.2
    volt: 211  	 cup: 214.32
    volt: 212  	 cup: 215.44
    volt: 213  	 cup: 216.56
    volt: 214  	 cup: 217.68
    volt: 215  	 cup: 218.8
    volt: 216  	 cup: 219.92000000000002
    volt: 217  	 cup: 221.04
    volt: 218  	 cup: 222.16
    volt: 219  	 cup: 223.28
    volt: 220  	 cup: 224.4
    volt: 221  	 cup: 225.52
    volt: 222  	 cup: 226.64
    volt: 223  	 cup: 227.76
    volt: 224  	 cup: 228.88
    volt: 225  	 cup: 230
    volt: 226  	 cup: 230.76
    volt: 227  	 cup: 231.52
    volt: 228  	 cup: 232.28
    volt: 229  	 cup: 233.04
    volt: 230  	 cup: 233.8
    volt: 231  	 cup: 234.56
    volt: 232  	 cup: 235.32
    volt: 233  	 cup: 236.08
    volt: 234  	 cup: 236.84
    volt: 235  	 cup: 237.6
    volt: 236  	 cup: 238.36
    volt: 237  	 cup: 239.12
    volt: 238  	 cup: 239.88
    volt: 239  	 cup: 240.64
    volt: 240  	 cup: 241.4
    volt: 241  	 cup: 242.16
    volt: 242  	 cup: 242.92000000000002
    volt: 243  	 cup: 243.68
    volt: 244  	 cup: 244.44
    volt: 245  	 cup: 245.2
    volt: 246  	 cup: 245.96
    volt: 247  	 cup: 246.72
    volt: 248  	 cup: 247.48
    volt: 249  	 cup: 248.24
    volt: 250  	 cup: 249
    volt: 251  	 cup: 250.12
    volt: 252  	 cup: 251.24
    volt: 253  	 cup: 252.36
    volt: 254  	 cup: 253.48
    volt: 255  	 cup: 254.6
    volt: 256  	 cup: 255.72
    volt: 257  	 cup: 256.84
    volt: 258  	 cup: 257.96
    volt: 259  	 cup: 259.08
    volt: 260  	 cup: 260.2
    volt: 261  	 cup: 261.32
    volt: 262  	 cup: 262.44
    volt: 263  	 cup: 263.56
    volt: 264  	 cup: 264.68
    volt: 265  	 cup: 265.8
    volt: 266  	 cup: 266.92
    volt: 267  	 cup: 268.04
    volt: 268  	 cup: 269.16
    volt: 269  	 cup: 270.28
    volt: 270  	 cup: 271.4
    volt: 271  	 cup: 272.52
    volt: 272  	 cup: 273.64
    volt: 273  	 cup: 274.76
    volt: 274  	 cup: 275.88
    volt: 275  	 cup: 277
    volt: 276  	 cup: 277.92
    volt: 277  	 cup: 278.84
    volt: 278  	 cup: 279.76
    volt: 279  	 cup: 280.68
    volt: 280  	 cup: 281.6
    volt: 281  	 cup: 282.52
    volt: 282  	 cup: 283.44
    volt: 283  	 cup: 284.36
    volt: 284  	 cup: 285.28
    volt: 285  	 cup: 286.2
    volt: 286  	 cup: 287.12
    volt: 287  	 cup: 288.04
    volt: 288  	 cup: 288.96
    volt: 289  	 cup: 289.88
    volt: 290  	 cup: 290.8
    volt: 291  	 cup: 291.72
    volt: 292  	 cup: 292.64
    volt: 293  	 cup: 293.56
    volt: 294  	 cup: 294.48
    volt: 295  	 cup: 295.4
    volt: 296  	 cup: 296.32
    volt: 297  	 cup: 297.24
    volt: 298  	 cup: 298.16
    volt: 299  	 cup: 299.08
  • Почему OffsetParent возвращает body, а не table?

    lastuniverse
    @lastuniverse
    Потому что тег <table></table> не может содержать тег <div></div>, а может только теги
    <caption>, <col>, <colgroup>, <tbody>, <td>, <tfoot>, <th>, <thead> и <tr>.
    (ссылка)

    И в результате вы получаете это:
    5e57ce603c188243865126.jpeg
  • Как сделать такое плавное закругление как тут?

    lastuniverse
    @lastuniverse
    В этом вопросе есть несколько разных вариантов ответа на ваш вопрос (с помощью css, с помощью svg)
    Как сверстать полукруглую границу блока?
    5e5d1d18008ed831951622.png
  • Почему в консоли не вывело в run?

    lastuniverse
    @lastuniverse
    Очевидно что cat1 у вас объект. Вот содержимое этого объекта у вас в консоль и вывело.

    Вот даже интересно почему вы считаете что должно было вывести cat/this.run()?

    Возможно вы совсем не понимаете что такое объекты и не умеете ими пользоваться?
    Если да, то попробуйте сделать так:

    window.onload = function(){
      var cat1 = new Cat('Мурзик');
      console.log(cat1.run());
    }
    function Cat(name){  // Передаем параметр name в функцию Cat
       this.name = name;
       this.age = 0;
    
       this.run = function(){
        console.log(1);
       }
    }