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

Определение столкновений в простой 2D игре - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Написать рекурсивную функцию вычисления суммы цифр натурального числа http://www.cyberforum.ru/cpp-beginners/thread681655.html
Нужно написать рекурсивную функцию вычисления суммы цифр натурального числа. Я написал нижеследующее что тоже работает, но это не рекурсивная функция, как написать рекурсивную? #include...
C++ написать рекурсивную функцию, которая взводит число в степень путем многократного умножения числа на самое себя. Помогите написать программу , которая запрашивает два числа (1-ое число, 2 -показатель его степени). И надо написать рекурсивную функцию, которая взводит число в степень путем многократного... http://www.cyberforum.ru/cpp-beginners/thread681646.html
Количество различных рациональных чисел которые можно получить роставляя скобки C++
Обозначим i-е простое число как Рi (Р1=2, Р2=3, Р3=5 и т.д.). Для данного числа n рассмотрим выражение: Р1 / Р2 / Р3 / ... / Рn. Напишите программу, подсчитывающую количество различных рациональных...
C++ Считывание текстового файла в структуру на С++
Задача: В текстовом файле записана следующая информация о пирожных: название, флаг, масса, питательность. Необходимо считать данные из файла, причем в зависимости от значения флага питательность...
C++ нужно определиться с наследованием класса http://www.cyberforum.ru/cpp-beginners/thread681627.html
#include <iostream.h> #include <stdlib.h> #include <conio.h> class B{ int a; public: B() { }; B(int x) { a=x; } void show_B() { cout <<"B= "<< a << "\n"; }
C++ Перевод из String^ в char*. Русскиме символы Доброго времени суток. Нужно перевести String^ в char*. Делаю следующим образом: String^ name_d=Convert::ToString(textBox1->Text); *temp = new char; int i; for(i=0; i<name_d->Length;i++) {... подробнее

Показать сообщение отдельно
KATbIK
86 / 81 / 10
Регистрация: 02.08.2011
Сообщений: 335
01.11.2012, 13:07
Попробую по памяти накидать:

Вот структуры(пример):
C++
1
2
3
4
struct Point {
   float x;
   float y;
};
C++
1
2
3
4
struct AABB {
    Point c;    // центр
    float r[2]; // r[0] - полуширина по x, r[1] - полуширина по y  
};
С помощью этого ты сможешь определить только наличие столкновения:
C++
1
2
3
4
5
6
bool TestAABBAABB(AABB &a, AABB &b)
{
    if (fabs (a.c[0] - b.c[0]) > (a.r[0] + b.r[0])) return false;
    if (fabs (a.c[1] - b.c[1]) > (a.r[1] + b.r[1])) return false;
    return true;
}
Для того, что бы найти велечену наложения и вектор перемещения:
// где mt вектор перемещения для a
C++
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
bool TestAABBAABB(AABB &a, AABB &b, Point &mt)
{
   double rcx = fabs (a.c[0] - b.c[0]);
   double rx = (a.r[0] + b.r[0]);
    if (rcx > rx) return false;
   double rcy = fabs (a.c[1] - b.c[1]);
   double ry = (a.r[1] + b.r[1]);
    if (rcy > ry) return false;
   double overlap_x = rcx - rx;
   double overlap_y = rcy - ry;
   mt.x = 0;
   mt.y = 0;
   if (overlap_x < overlap_y)
  {
    mt.x = overlap_x;  
    if (a.c[0] < b.c[0])
    {
       mt.x = -mt.x;
    }
  } else {
        mt.y = overlap_y;  
        if (a.c[1] < b.c[1])
       {
          mt.y = -mt.y;
       }
    }
    return true;
}
Пишу по памяти, проверяй, может есть ошибки... (времени нет проверять)

Добавлено через 22 минуты
C++
1
2
double overlap_x = rx - rсx;
double overlap_y = ry - rсy;
Добавлено через 17 минут
вот что значит быстро печатать вместо a.c[0] => a.c.x; a.c[1] => a.c.y; для b тоже самое
1
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru