Advertisement
Aranyalma2

mertani szorg

Oct 13th, 2020 (edited)
1,911
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.30 KB | None | 0 0
  1. /*********************
  2. Author: Nemeth Balint
  3. *********************/
  4.  
  5. #include <SDL2/SDL.h>
  6. #include <SDL2/SDL2_gfxPrimitives.h>
  7. #include <math.h>
  8. #include <stdlib.h>
  9. #include <stdbool.h>
  10.  
  11. typedef struct Pontok{
  12.     int x;
  13.     int y;
  14. }Pontok;
  15. double distance(int pX, int pY, int x, int y);
  16. bool kb_egyenlo(double arg, int dist, int eps);
  17.  
  18. //InfoC
  19. void sdl_init(char const *felirat, int szeles, int magas, SDL_Window **pwindow, SDL_Renderer **prenderer) {
  20.     if (SDL_Init(SDL_INIT_EVERYTHING) < 0) {
  21.         SDL_Log("Nem indithato az SDL: %s", SDL_GetError());
  22.         exit(1);
  23.     }
  24.     SDL_Window *window = SDL_CreateWindow(felirat, SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, szeles, magas, 0);
  25.     if (window == NULL) {
  26.         SDL_Log("Nem hozhato letre az ablak: %s", SDL_GetError());
  27.         exit(1);
  28.     }
  29.     SDL_Renderer *renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_SOFTWARE);
  30.     if (renderer == NULL) {
  31.         SDL_Log("Nem hozhato letre a megjelenito: %s", SDL_GetError());
  32.         exit(1);
  33.     }
  34.     SDL_RenderClear(renderer);
  35.  
  36.     *pwindow = window;
  37.     *prenderer = renderer;
  38. }
  39.  
  40. int main(int argc, char *argv[]) {
  41.     //vars
  42.     Pontok pontok[6] = {
  43.             {320, 240},
  44.             {240, 200},
  45.             {420, 280},
  46.             {240, 240},
  47.             {400, 240},
  48.  
  49.     };
  50.     int eps = 5;
  51.     double d1, d2;
  52.  
  53.     // ablak létrehozása
  54.     SDL_Window *window;
  55.     SDL_Renderer *renderer;
  56.     sdl_init("Azon pontok mertani helye", 640, 480, &window, &renderer);
  57.  
  58.     for (int x = 0; x < 640; x++) {
  59.         for (int y = 0; y < 480; y++) {
  60.  
  61.             //CIRCLE
  62.             d1 = distance(pontok[0].x, pontok[0].y, x, y);
  63.             if (kb_egyenlo(d1, 200, eps)) {
  64.                 pixelRGBA(renderer, x, y, 255, 0, 0, 255);
  65.             }
  66.  
  67.             //ELLIPSE
  68.             d1 = distance(pontok[1].x, pontok[1].y, x, y);
  69.             d2 = distance(pontok[2].x, pontok[2].y, x, y);
  70.             if (kb_egyenlo(d1+d2, 250, eps)) {
  71.                 pixelRGBA(renderer, x, y, 0, 255, 0, 255);
  72.             }
  73.  
  74.             //HYPERBOLE
  75.             d1 = distance(pontok[3].x, pontok[3].y, x, y);
  76.             d2 = distance(pontok[4].x, pontok[4].y, x, y);
  77.             if (kb_egyenlo(fabs(d1-d2), 100, eps)) {
  78.                 pixelRGBA(renderer, x, y, 0, 0, 255, 255);
  79.             }
  80.  
  81.             //PARABOLE
  82.             d1 = distance(pontok[0].x, pontok[0].y, x, y);
  83.             d2 = 400 - x;
  84.             if (kb_egyenlo(d1-d2, 0, eps)) {
  85.                 pixelRGBA(renderer, x, y, 255, 255, 255, 255);
  86.             }
  87.         }
  88.     }
  89.  
  90.     //NAMES
  91.     stringRGBA(renderer, 550, 10, "Kor", 255, 0, 0, 255);
  92.     stringRGBA(renderer, 550, 30, "Elipszis", 0, 255, 0, 255);
  93.     stringRGBA(renderer, 550, 50, "Hiperbola", 0, 0, 255, 255);
  94.     stringRGBA(renderer, 550, 70, "Parabola", 255, 255, 255, 255);
  95.  
  96.  
  97.     /* az elvegzett rajzolasok a kepernyore */
  98.     SDL_RenderPresent(renderer);
  99.  
  100.     /* varunk a kilepesre */
  101.     SDL_Event ev;
  102.     while (SDL_WaitEvent(&ev) && ev.type != SDL_QUIT) {
  103.     }
  104.  
  105.     /* ablak bezarasa */
  106.     SDL_Quit();
  107.  
  108.     return 0;
  109. }
  110.  
  111. double distance(int pX, int pY, int x, int y) {
  112.     return sqrt(pow(pX - x, 2) + pow(pY - y, 2));
  113. }
  114.  
  115. bool kb_egyenlo(double arg, int dist, int eps){
  116.     return (arg + eps >= dist && arg - eps<= dist);
  117. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement