Przejdź do zawartości

BasicC/Współrzędne

Z Wikibooks, biblioteki wolnych podręczników.

DegAt(W,H)

[edytuj]

Funkcja podaje kierunek wektora [W,H]. Bazuje na funkcji atan2, ale wynik dostosowuje do geometrii SDL. Wynik jest w stopniach od -180 do 180, 0 stopni wskazuje kierunek północny, czyli np. wektor [0,-1] ma 0 stopni. Definicja: (atan2(W,-(H))*57.29578)

Distance(x,y,x2,y2)

[edytuj]

Odległość punktu (x,y) od punktu (x2,y2)

PointInCircle(Px,Py,X,Y,R)

[edytuj]

Zwraca 1 jeśli punkt (Px,Py) znajduje się wewnątrz koła (X,Y,R), 0 jeśli nie.

PointInBox(px,py,x1,y1,x2,y2)

[edytuj]

Zwraca 1 jeśli punkt (px,py) znajduje się wewnątrz prostokąta (x1,y1,x2,y2), 0 jeśli nie. Warunki: x2>=x1, y2>=y1.

PointInRect(px,py,rx,ry,w,h)

[edytuj]

J.w., ale zamiast 2. rogu podajemy szer. i wys. Warunki: w>=0, h>=0. Odpowiada funkcji SDL_PointInRect(&p,&r), gdzie p jest strukturą typu SDL_Point o polach int x i int y, p.x i p.y to współrzędne punktu. Analogicznie r jest typu SDL_Rect, r.x i r.y to współrzędne rogu, r.w i r.h to szerokość i wysokość prostokąta.

CircleCollide(x,y,r,x2,y2,r2)

[edytuj]

Zwraca 1 jeśli koła (x,y,r) i (x2,y2,r2) posiadają punkty wspólne, 0 jeśli nie.

RectCollide(A,B)

[edytuj]

Zwraca 1 jeśli prostokąt A i B posiadają punkty wspólne, 0 jeśli nie. A i B to struktury typu SDL_Rect. Odpowiada funkcji SDL_HasIntersection(&A,&B)

SRC(X,Y,W,H)

[edytuj]

DST(X,Y,W,H)

[edytuj]

Komendy do szybkiego ustawiania pól zmiennych SRC i DST typu SDL_Rect. Są to zmienne pomocnicze zadeklarowane w BasicSDL.h

Przykład:

include "BasicSDL.h"
SDL_Point punkt={100,350};
MAIN
  SDLOpen(0)
  Color(-1)
  Draw(0,0,200,199)
  GPrintAt(300,0,"Nachylenie ") GPrint(Str$(DegAt(200,199)))
  GPrintAt(300,32,"Długość ") GPr(Distance(0,0,200,199))
  Rect(0,200,100,200) Rect(100,200,100,100)
  SRC(0,200,100,200) DST(100,200,100,100)
  If (RectCollide(SRC,DST))
    GPrintAt(300,232,"kolizja")
  Else
    GPrintAt(300,232,"brak kolizji")
  EndIf
  Color(65535)
  Plot(punkt.x,punkt.y)
  If (PointInBox(punkt.x,punkt.y,0,200,99,399))
    GPrintAt(110,350,"punkt w prostokącie")
  Else
    GPrintAt(110,350,"punkt poza prostokątem")
  EndIf
  ShowPage
  WaitInKey
  SDLQuit
ENDMAIN