Compare commits
13 Commits
4f3c184519
...
e64cbfdcf2
Author | SHA1 | Date |
---|---|---|
Simon Bruder | e64cbfdcf2 | |
Simon Bruder | 18da3567cc | |
Simon Bruder | f482d0a951 | |
Simon Bruder | 1aae98c18b | |
Simon Bruder | 2290a6314d | |
Simon Bruder | c5289609e5 | |
Simon Bruder | 085b8fcdb9 | |
Simon Bruder | 8f784ccf3e | |
Simon Bruder | ad02a06db4 | |
Simon Bruder | d4794e1544 | |
Simon Bruder | 583f2ecd3e | |
Simon Bruder | 85e38a358d | |
Simon Bruder | 2226fb32af |
|
@ -9,7 +9,7 @@
|
|||
pkgs = import nixpkgs { inherit system; };
|
||||
mkNocheck = drv: drv.overrideAttrs (o: {
|
||||
doCheck = false;
|
||||
nativeBuildInputs = pkgs.lib.filter (p: p != pkgs.catch2_3) o.nativeBuildInputs;
|
||||
checkInputs = [ ];
|
||||
});
|
||||
in
|
||||
{
|
||||
|
@ -20,7 +20,8 @@
|
|||
|
||||
src = ./u01;
|
||||
|
||||
nativeBuildInputs = [ catch2_3 cmake ];
|
||||
nativeBuildInputs = [ cmake ];
|
||||
checkInputs = [ catch2_3 ];
|
||||
|
||||
doCheck = true;
|
||||
})
|
||||
|
@ -32,7 +33,9 @@
|
|||
|
||||
src = ./u02;
|
||||
|
||||
nativeBuildInputs = [ catch2_3 cmake freeglut libGL libGLU ];
|
||||
nativeBuildInputs = [ cmake ];
|
||||
buildInputs = [ freeglut libGL libGLU ];
|
||||
checkInputs = [ catch2_3 ];
|
||||
|
||||
doCheck = true;
|
||||
})
|
||||
|
|
|
@ -22,11 +22,15 @@ regular_polygon_mod(int n, std::function<float(int)> rf, int x = 0, int y = 0,
|
|||
// and the centre (x, y),
|
||||
// rotated by base_angle.
|
||||
std::vector<std::pair<float, float>> star(int n, float r1, float r2, int x = 0,
|
||||
int y = 0, float base_angle = 0);
|
||||
int y = 0, float base_angle = 0);
|
||||
|
||||
class star_tool : public tool_base {
|
||||
public:
|
||||
star_tool(canvas_buffer &canvas);
|
||||
// Initialize a new star tool.
|
||||
// It can draw stars with arbitrary number of spikes (however, at least 2).
|
||||
// The preview only supports spikes from 3 to 6 and falls back to 5
|
||||
// if a spike outside of that range is given.
|
||||
star_tool(canvas_buffer &canvas, int spikes = 5);
|
||||
|
||||
void draw(int x0, int y0, int x1, int y1);
|
||||
|
||||
|
@ -37,6 +41,6 @@ public:
|
|||
void set_radius_factor(int radius_factor);
|
||||
|
||||
private:
|
||||
int spikes = 5;
|
||||
int spikes;
|
||||
float radius_factor = 1.0 / 3.0;
|
||||
};
|
||||
|
|
|
@ -53,9 +53,10 @@ jedoch erst ab 3 eine Art Stern vorliegt).
|
|||
In dem Beispielprogramm kann jedoch aus Komplexitätsgründen nur aus bestimmten Zackenanzahlen gewählt werden,
|
||||
was jedoch per Kontextmenü möglich ist und damit der Aufgabenstellung entspricht.
|
||||
|
||||
Darüber hinaus wurde rudimentär eine Vorschau der Sternform hinzugefügt,
|
||||
was jedoch nur für eine feste Zackenanzahl (hier: 5) möglich ist,
|
||||
ohne die Architektur der Applikation zu ändern.
|
||||
Darüber hinaus wurde rudimentär eine Vorschau der Sternform hinzugefügt.
|
||||
Da die vorgegebene Architektur keine Spezialisierungen der Formen eines Tools erlaubt,
|
||||
und C++ (anders als bspw. Rust) keine Tuple/Struct enums zulässt,
|
||||
wurden hier nur die über die Benutzerschnittstelle verfügbaren Zackenanzahlen fest implementiert.
|
||||
|
||||
### Sweepline-Algorithmus
|
||||
|
||||
|
|
|
@ -41,8 +41,8 @@ std::vector<std::pair<float, float>> star(int n, float r1, float r2, int x,
|
|||
base_angle);
|
||||
}
|
||||
|
||||
star_tool::star_tool(canvas_buffer &canvas) : tool_base(canvas) {
|
||||
shape = TS_STAR;
|
||||
star_tool::star_tool(canvas_buffer &canvas, int spikes) : tool_base(canvas) {
|
||||
set_spikes(spikes);
|
||||
}
|
||||
|
||||
void star_tool::draw(int x0, int y0, int x1, int y1) {
|
||||
|
@ -67,7 +67,25 @@ void star_tool::set_text(std::stringstream &stream) {
|
|||
stream << "Tool: Star (" << spikes << " spikes)";
|
||||
}
|
||||
|
||||
void star_tool::set_spikes(int spikes) { this->spikes = spikes; }
|
||||
void star_tool::set_spikes(int spikes) {
|
||||
this->spikes = spikes;
|
||||
switch (spikes) {
|
||||
case 3:
|
||||
shape = TS_STAR_3;
|
||||
break;
|
||||
case 4:
|
||||
shape = TS_STAR_4;
|
||||
break;
|
||||
// 5 is default, handled at the end
|
||||
case 6:
|
||||
shape = TS_STAR_6;
|
||||
break;
|
||||
case 5:
|
||||
default:
|
||||
shape = TS_STAR_5;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void star_tool::set_radius_factor(int radius_factor) {
|
||||
this->radius_factor = radius_factor;
|
||||
|
|
Reference in New Issue