Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.09.2021, 21:50   #1
Banki
 
Регистрация: 13.11.2020
Сообщений: 9
По умолчанию Движение окружности под некоторым углом с отражением от стенки. SDL 1.2

Необходимо написать программу движения окружности в прямоугольнике. Движение происходит под некоторым углом с «отражением от стенки». Все это на SDL 1.2. Теоретически понимаю, что нужно выщитывать через синус/косинус, но как это реализовать не представляю вообще.

Код:
#include <stdlib.h>
#include <SDL.h>
#include <SDL_draw.h>
#define M_PI 3.1415926535897932
 
SDL_Surface *background;
 
const int scrwidth = 1000, scrheight = 820, scrdepth = 32;
int x=scrwidth/2, y=scrheight/2, r=40;
int w1=0, w2=1000, y1h=0, y2h=820, z;
 
int main(int argc, char *argv[]){
    SDL_Event event;
      if (SDL_Init(SDL_INIT_VIDEO))
    {
        fprintf(stderr,"Ошибка в SDL_Init: %s\n",SDL_GetError());
        return 1;
    }
    background=SDL_SetVideoMode(scrwidth,scrheight,scrdepth,SDL_ANYFORMAT);
 
    while(true)
    {
        
        Draw_Circle(background, x, y, r, 0xFFFFFF);
        SDL_Flip(background);
        SDL_FillRect(background, NULL, 0x000000);
 
    }
 
    if (!background)
    {
        fprintf(stderr,"SDL mode failed: %s\n",SDL_GetError());
        return 1;
    }
 
    while(SDL_WaitEvent(&event))
    {
        if(event.type == SDL_QUIT ||
                (event.type == SDL_KEYDOWN &&
                 event.key.keysym.sym == SDLK_ESCAPE))
        {
            SDL_Quit();
            return 0; /* пусть 0 - нормальное завершение*/
        }
 
}
}
Banki вне форума Ответить с цитированием
Старый 29.09.2021, 23:49   #2
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,309
По умолчанию

Если при столкновении нет передачи энергии стенкам прямоугольника, то sin и cos не нужны.
Обнаруживаете столкновение и меняете соответствующую проекцию скорости на противоположную.
Т.е., если столкновение с левой или правой стороной прямоугольника, то Vx = -Vx,
а если с верхней или нижней, то Vy = -Vy
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 30.09.2021, 07:20   #3
Banki
 
Регистрация: 13.11.2020
Сообщений: 9
По умолчанию

Цитата:
Сообщение от ViktorR Посмотреть сообщение
Если при столкновении нет передачи энергии стенкам прямоугольника, то sin и cos не нужны.
Обнаруживаете столкновение и меняете соответствующую проекцию скорости на противоположную.
Т.е., если столкновение с левой или правой стороной прямоугольника, то Vx = -Vx,
а если с верхней или нижней, то Vy = -Vy
Понял прмерно, уже начал что то писать через if else, Вот только надо чтоб эти проверки шли пока сам не остановишь, как их можно зациклить?
Banki вне форума Ответить с цитированием
Старый 30.09.2021, 09:07   #4
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Цитата:
Вот только надо чтоб эти проверки шли пока сам не остановишь, как их можно зациклить?
а как реализовано(зациклено) само движение?
вот именно там где реализуется само движение(изменение координат) и надо делать проверки (if ...).
в том же самом цикле(или том что его реализует).
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 30.09.2021, 10:23   #5
Banki
 
Регистрация: 13.11.2020
Сообщений: 9
По умолчанию

Цитата:
Сообщение от ViktorR Посмотреть сообщение
Если при столкновении нет передачи энергии стенкам прямоугольника, то sin и cos не нужны.
Обнаруживаете столкновение и меняете соответствующую проекцию скорости на противоположную.
Т.е., если столкновение с левой или правой стороной прямоугольника, то Vx = -Vx,
а если с верхней или нижней, то Vy = -Vy
Заметил, если нк использовать sin/cos, то, если изменять x++/x--(так же с y), то движение будет только под углом 45гр. Лобо ровно горизонтальное вертикальное, а в задании говорится под некоторым углом.

Последний раз редактировалось Banki; 30.09.2021 в 10:34.
Banki вне форума Ответить с цитированием
Старый 30.09.2021, 10:40   #6
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Цитата:
то движение будет только под углом 45гр.
x =x +Vx;
y =y +Vy;
если Vx =(±)Vy то движение под углом 45°
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 30.09.2021, 11:01   #7
Banki
 
Регистрация: 13.11.2020
Сообщений: 9
По умолчанию

Цитата:
Сообщение от ViktorR Посмотреть сообщение
Если при столкновении нет передачи энергии стенкам прямоугольника, то sin и cos не нужны.
Обнаруживаете столкновение и меняете соответствующую проекцию скорости на противоположную.
Т.е., если столкновение с левой или правой стороной прямоугольника, то Vx = -Vx,
а если с верхней или нижней, то Vy = -Vy
Понял прмерно, уже начал что то писать через if else, Вот только надо чтоб эти проверки шли пока сам не остановишь, как их можно зациклить?

Цитата:
Сообщение от evg_m Посмотреть сообщение
x =x +Vx;
y =y +Vy;
если Vx =(±)Vy то движение под углом 45°
Так, если Vx/Vy будет больше 1, то окружность будет перескакивать и движение будет дерганое, чтобы шаг перемещения был не больше 1, то нужно будет испоььзовать float, а может ли SDL_SETVIDEOMODE принимать разрешение окна не в int, а в float?
Banki вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Assembler движение обьекта в консоле под углом ShevchenkoDmytro Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 27.11.2019 02:37
Движение тела, брошенного под углом к горизонту pompiduskus PHP 2 27.09.2013 05:00
Движение тела, брошенного под углом к горизонту с учетом сопротивления Encore Помощь студентам 0 03.04.2011 20:34
Движение тела, брошенного под углом к горизонту Medik07 Общие вопросы C/C++ 1 17.03.2011 22:28
Движение тела под углом Lemo Помощь студентам 6 05.04.2009 14:49