Created
April 8, 2017 20:33
-
-
Save PoetaKodu/e0619b8a0f7fd4c21fe170c531243e9b to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include "../Include/SFMLShapes.hpp" | |
#include "../Include/Math.hpp" | |
namespace SFMLShapes | |
{ | |
sf::ConvexShape GeneratePie(const float & radius, const float & angle, unsigned int vertexCount) | |
{ | |
/* Nie mozemy utworzyc wycinka kola z mniej niz 3 punktow. | |
Zabezpieczamy przed nierozsadnym uzytkownikiem | |
*/ | |
if (vertexCount < 3) | |
vertexCount = 3; | |
/* Tworzymy sobie pomocnicza zmienna, ktora zawiera kat "angle" tylko ze w radianach. | |
Potrzebujemy kata w radianach bo wymagaja tego funkcje trygonometryczne cos() i sin() | |
*/ | |
const float angleRad = angle * grim::Math::Pi / 180.f; | |
// Tworzymy nowy ksztalt. | |
auto shape = sf::ConvexShape(); | |
// Ilosc punktow to vertexCount. Tym samym wiemy, ze ich indeksy to od 0 do vertexCount-1 | |
shape.setPointCount(vertexCount); | |
// Dodajemy punkt startowy (punkt 0px,0px). Punkt ten lezy w centrum kola | |
shape.setPoint(0, { 0, 0 }); | |
/* Teraz zaczynamy dodawac punkty od indeksu 1 (indeks 0 wypelnilismy na gorze) | |
Lecimy az do ostatniego | |
*/ | |
for (auto i = 1u; i < vertexCount; i++) | |
{ | |
/* Liczymy sobie kat pod ktorym lezy aktualny punkt. | |
Caly wycinek rozposciera sie od -angle do +angle, lecz my od razu bedziemy pracowac na radianach. | |
Wynikowy kat to po prostu -angleRad + 2*angleRad*(i-1)*(vertexCount-1) | |
*/ | |
const float targetAngle = -angleRad + (i - 1) / float(vertexCount - 1)*angleRad * 2; | |
// liczymy pozycje tego punktu: (x, y). Robimy to tak: (cos(kat)*radius, sin(kat)*radius) | |
shape.setPoint(i, { cos(targetAngle)*radius, sin(targetAngle)*radius }); | |
} | |
return shape; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment