Advertisement
Guest User

Untitled

a guest
Feb 20th, 2022
134
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.37 KB | None | 0 0
  1. void rotate_point(float cx, float cy, float angle, int *px,int *py) {
  2.  
  3.     *px = cos(angle) * (*px - cx) - sin(angle) * (*py - cy) + cx;
  4.     *py = sin(angle) * (*px - cx) + cos(angle) * (*py - cy) + cy;
  5. }
  6. int main(int argc, char* argv[])
  7. {
  8.     if (SDL_Init(SDL_INIT_EVERYTHING) < 0)
  9.     {
  10.         std::cout << "SDL initialization failed. SDL Error: " << SDL_GetError();
  11.     }
  12.     else
  13.     {
  14.         std::cout << "SDL initialization succeeded!";
  15.     }
  16.  
  17.     SDL_Surface* screen_surface = NULL;
  18.     SDL_Window* window = SDL_CreateWindow("", SDL_WINDOWPOS_UNDEFINED,
  19.         SDL_WINDOWPOS_UNDEFINED, 1024, 768,
  20.         SDL_WINDOW_SHOWN);
  21.     SDL_Rect es = { 0,0,1024,768 };
  22.     bool quit = false;
  23.     SDL_Event event;
  24.     SDL_Renderer* renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED);
  25.     int sX = 1, sY = 1;
  26.     SDL_Texture* shp = IMG_LoadTexture(renderer, "K:\\spaceship.png");
  27.     double sRot = 0.0;
  28.     SDL_Rect SrcR,dest;
  29.     SrcR.x = 0;
  30.     SrcR.y = 0;
  31.     SrcR.w = 600;
  32.     SrcR.h = 600;
  33.  
  34.     dest.x = 300;
  35.     dest.y = 300;
  36.     dest.w = 60;
  37.     dest.h = 60;
  38.  
  39.     double K = sRot * (M_PI / 180.0);
  40.     int xA= dest.x, yA= dest.y;
  41.     int rX, rY;
  42.     while (!quit)
  43.     {
  44.         xA = dest.x + dest.w / 2;
  45.         yA = dest.y + dest.h / 2;
  46.         rX = dest.x;
  47.         rY = dest.y;
  48.  
  49.         SDL_PollEvent(&event);
  50.  
  51.         switch (event.type)
  52.         {
  53.             case SDL_QUIT:
  54.                 quit = true;
  55.                 break;
  56.             case SDL_KEYDOWN:
  57.             {
  58.                 switch (event.key.keysym.sym)
  59.                 {
  60.                     case SDLK_UP:
  61.                     {
  62.                         dest.y = dest.y - 1 * cos(K * -1);
  63.                         dest.x = dest.x - 1 * sin(K * -1);
  64.                         printf("x %d y %d %f\n", dest.x, dest.y,K*-1);
  65.                     }break;
  66.                     case SDLK_DOWN:
  67.                     {
  68.                         dest.y = dest.y + 1 * cos(K*-1);
  69.                         dest.x = dest.x + 1 * sin(K*-1);
  70.                         printf("x %d y %d %f\n", dest.x, dest.y, K*-1);
  71.                     }break;
  72.                     case SDLK_LEFT:
  73.                     {
  74.                         sRot = sRot - 1.0;
  75.                         K = sRot / (180.0 / M_PI);
  76.                         //printf("%lf\n",K );
  77.                     }break;
  78.                     case SDLK_RIGHT:
  79.                     {
  80.                         sRot = sRot + 1.0;
  81.                         K = sRot / (180.0 / M_PI);
  82.                         //printf("%lf\n", K );
  83.                     }break;
  84.                 }
  85.             }break;
  86.            
  87.         }
  88.         SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255);
  89.         SDL_RenderFillRect(renderer, &es);
  90.         SDL_Delay(10);
  91.         SDL_RenderCopyEx(renderer, shp, &SrcR, &dest, sRot, NULL, SDL_FLIP_HORIZONTAL);
  92.         SDL_SetRenderDrawColor(renderer, 255, 255, 255, SDL_ALPHA_OPAQUE);
  93.         rotate_point(xA, yA, K, &rX,&rY);
  94.         SDL_RenderDrawLine(renderer, xA/*dest.x + dest.w / 2*/,yA /*dest.y*/, xA - 100 * sin(K * -1), yA - 100 * cos(K * -1));
  95.         SDL_SetRenderDrawColor(renderer, 255, 0, 0, SDL_ALPHA_OPAQUE);
  96.         SDL_RenderDrawLine(renderer, rX,rY, rX - 100 * sin(K * -1), rY - 100 * cos(K * -1));
  97.         SDL_RenderPresent(renderer);
  98.     }
  99.  
  100.     // cleanup SDL
  101.  
  102.     SDL_DestroyRenderer(renderer);
  103.     SDL_DestroyWindow(window);
  104.     SDL_Quit();
  105.     return 0;
  106. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement