Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Программирование Android

Войти
Регистрация
Восстановить пароль
 
Amrel
9 / 9 / 2
Регистрация: 14.05.2015
Сообщений: 62
#1

Законы физики в программировании - Программирование Android

29.06.2015, 14:41. Просмотров 663. Ответов 9
Метки нет (Все метки)

Тренируюсь писать программы на андроид, вспомнил в детстве была такая головоломка шар в лабиринте, решил подобное повторить на телефоне.
Считываю сенсоры и перемещаю нарисованный круг, но вот только круг передвигается на экрану линейно, а не по законам физики.
Вспомнил физику за 9 класс: скорость равна ускорению свободного падения на время и применил его так:
Java
1
2
3
 
        x = (int) (k * timeX *Math.sin(radX));
        ball.setTranslationY(ball.getTranslationX() + x);
где: k - коэффициент свободного падения (подбираемый (в физике 9.8)), timeX - счетчик считает по 100 м.с. для ускорения, и Math.sin(radX) - синус угла наклона (v=a*t*sin(x)). И то что получилось прибавляю к координатам кружка, тоже самое по Y
Да согласен криво получается: ищем скорость а прибавляем к координатам и т.д.

Как не странно работает и шарик при наклоне телефона ускоряется, и катается по всему экрану, но криво как то это происходит, а как ввести массу инерцию я не представляю...

Подскажите пожалуйста как реализовать данные вещи и можно ли применять законы физики в программе?
А если можно то как? Думаю мне для инерции нужно применить: F=ma, но что мне делать с силой- F?
Как правильно это реализовать?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.06.2015, 14:41
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Законы физики в программировании (Программирование Android):

Какую часть занимают законы физики в C++ ? - C++
Я новичок. Мне интересно. Часто ли вам приходится выстраивать формулы законов физики. Т.е. много ли физики в языке C++ ? Да и вообще вот...

Движение объекта по кривым, соблюдая законы физики - XNA
Решил я снова "повоевать" с физикой. Есть код проверки столкновений: static bool IntersectPixels(Rectangle rectangleA, Color dataA,...

Движение объекта к заданной точке, используя законы физики - C#
if (isJumping != false) { if (YSpeed >= 0) { YSpeed += (YSpeed +...

законы Кирхгофа - Электротехника
Правильно ли я расписал по законам Кирхгофа?

Законы Кеплера - Астрономия
Известно, что законы Кеплера справедливы для всех планет Солнечной системы, это выражено и в их определениях (например: "Каждая планета...

Законы сохранения - Механика
решите пожалуйста задачу 1 и 2 !

9
Valakin
431 / 97 / 15
Регистрация: 21.02.2015
Сообщений: 731
29.06.2015, 14:53 #2
не понятно что значит "криво катается"
на шарик действует две силы
сила тяжести
и сила трения качения
0
Amrel
9 / 9 / 2
Регистрация: 14.05.2015
Сообщений: 62
29.06.2015, 15:01  [ТС] #3
Цитата Сообщение от Valakin Посмотреть сообщение
не понятно что значит "криво катается"
на шарик действует две силы
сила тяжести
и сила трения качения
Нет у шарика массы и нет инерции, при изменении положения телефона он сразу же меняет направления движения.
Мне не нужна сила трения, мне нужна инерция..
0
GukZiLLA
35 / 35 / 2
Регистрация: 30.11.2013
Сообщений: 102
29.06.2015, 15:21 #4
Не думаю, что для такой игры нужна прям физика-физика.

Нужен постоянный цикл, в котором будет происходить обработка: считываться показания сенсоров и двигаться шарик
Когда наклоняем экран, то вычисляем ускорение типа ускорение = угол_наклона * коэффициент_подберем_сами
А в цикле уже задаем скорость шарику как: скорость += ускорение

Если катили в один угол, а потом наклонили в другой, то потребуется время, чтобы скорость изменилась типа: скорость += минусовое_ускорение

А уже с учетом текущей скорости и угла наклона вычисляем следующие координаты и двигаем шарик
0
Amrel
9 / 9 / 2
Регистрация: 14.05.2015
Сообщений: 62
29.06.2015, 15:57  [ТС] #5
Цитата Сообщение от GukZiLLA Посмотреть сообщение
Когда наклоняем экран, то вычисляем ускорение типа ускорение = угол_наклона * коэффициент_подберем_сами
А в цикле уже задаем скорость шарику как: скорость += ускорение
А как от скорости и ускорения перейти к координатам? а точнее на сколько сместить шарик? и как к времени привязать? Распишите пожалуйста Вашу формулу более подробно.
Думаю там нужен квадрат, вот только квадрат чего не понятно, может времени?
0
Valakin
431 / 97 / 15
Регистрация: 21.02.2015
Сообщений: 731
29.06.2015, 16:18 #6
начнем с начала
если в начале перемение и скорость равны нулю то при наклоне вперед
через секунду можно найти скорость (по ускорению)
например 9,8*sin(1 градус)
потом зная скорость находите новое положение шарика
по формуле
x=x0+v*t+a*t2/2
или x=0+0*1+9,8*sin(1 градус)*1*1/2
следующее положение шарика и скорость так же

Добавлено через 1 минуту
через две секунды
x2=9,8*sin(1 градус)*1*1/2+9,8*sin(1 градус)*2*1+2*9,8*sin(1 градус)*1*1/2

Добавлено через 50 секунд
и тут кто то повернул обратно
то есть наклон стал -1 градус

Добавлено через 1 минуту
находим скорость
v=9,8*sin(1 градус)
и так далее

Добавлено через 1 минуту
усложнит что кроме x есть еще и у
то есть надо считать скорости, положения по х и по у

Добавлено через 1 минуту
выложите код если получится, многим пригодится
0
Amrel
9 / 9 / 2
Регистрация: 14.05.2015
Сообщений: 62
29.06.2015, 16:27  [ТС] #7
Цитата Сообщение от Valakin Посмотреть сообщение
x=x0+v*t+a*t2/2
1 шаг. Новое положение = старое положение + скорость на время + квадрат времени на синус угла и ускорение.
Скорость равна нулю, все ясно. t=1
2 шаг. нужно сначала найти скорость она равна a*t2/2? t=2
3 шаг. скорость равна v*t+a*t2/2? t=3
Очень быстрое ускорение, если это все в цикле t=100 м.с.
0
Valakin
431 / 97 / 15
Регистрация: 21.02.2015
Сообщений: 731
29.06.2015, 16:31 #8
скорость определяется по ускорению и предыдущей скорости
на второй секунде
скорость равна предыдущая скорость +ускорение * время (то есть 1секунду)
0
Amrel
9 / 9 / 2
Регистрация: 14.05.2015
Сообщений: 62
05.07.2015, 20:52  [ТС] #9
Вообщем расчеты выкладывать не буду выложу конечный вариант:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
        radY = OrientationData[1];
        radZ = OrientationData[2];
 
//////////////////////////////////////////////////
        timer = new Timer();
        mTimerTask = new MyTimerTask();
        timer.schedule(mTimerTask, timerInt, timerInt);
 
//////////////////////////////////////////////////
 
    class MyTimerTask extends TimerTask {
        @Override
        public void run() {
            SS=(int) (40*coefficientG* Math.sin(radY));
            xy = xy + (int) (coefficientG*Math.sin(radY));
            xz = xz + (int) (coefficientG*Math.sin(radZ));
            time++;
            time2++;
        }
    }
0
CoolMind
419 / 402 / 65
Регистрация: 06.10.2012
Сообщений: 1,727
06.07.2015, 13:39 #10
Amrel, что-то вы, товарищ, совсем не то делаете.
Во-первых, непонятна зависимость трёх переменных от времени.
Во-вторых, в играх время наращивается (суммируется) не так. В C++ я работал на движке, который каждый кадр вызывает обновление. Там же ведётся подсчёт времени (чтобы уметь описывать траектории, рисовать эффекты и т.п.). Так вот, частота кадров - величина переменная, а значит, и dt - тоже (т.е. интервал времени между вызовами обновления сцены). У вас тут всё сделано наоборот.
0
06.07.2015, 13:39
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.07.2015, 13:39
Привет! Вот еще темы с ответами:

Законы распределения - C#
Как реализовать биномиальный закон распределения и закон распределения Пуассона? Может кто подсказать?

Законы неоднородности - Maple
Нужна помощь в написании законов неоднородности для кручения,конкретно в написании кода для отображения графика.Законы есть,есть пример,но...

Законы сохранения - Механика
Какая-то очень жесткая задача... Никогда таких не решала. Помогите решить. Крутильно-баллистический маятник состоит из двух шаров,...

Законы Кирхгофа - Электротехника
Помогите составить систему уравнений используя законы Кирхгофа. А то лаба горит, хоть убей не могу сделать.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru