Board 0.9.6
examples/triangles.cpp
#include <Board.h>
#include <cassert>
#include <ctime>
using namespace LibBoard;
{
};
std::vector<Polyline> divided(const Polyline & t, Division division)
{
std::vector<Polyline> result;
assert(t.vertexCount() == 3);
assert(t.path().isClosed());
const Point a = t.path()[0];
const Point b = t.path()[1];
const Point c = t.path()[2];
if (division == DivTriangle) {
const Point ab = mix(a, b, 0.5);
const Point bc = mix(b, c, 0.5);
const Point ca = mix(c, a, 0.5);
result.push_back(triangle(ab, bc, ca));
result.push_back(triangle(a, ab, ca));
result.push_back(triangle(b, bc, ab));
result.push_back(triangle(c, ca, bc));
} else if (division == DivVertexA) {
const Point bc = mix(b, c, 0.5);
result.push_back(triangle(b, bc, a));
result.push_back(triangle(c, a, bc));
} else if (division == DivVertexB) {
const Point ac = mix(a, c, 0.5);
result.push_back(triangle(c, ac, b));
result.push_back(triangle(a, b, ac));
} else if (division == DivVertexC) {
const Point ab = mix(a, b, 0.5);
result.push_back(triangle(a, ab, c));
result.push_back(triangle(b, c, ab));
}
return result;
}
std::vector<Polyline> divided(const std::vector<Polyline> & v, Division division)
{
std::vector<Polyline> result;
for (const Polyline & p : v) {
auto div = divided(p, division);
for (const Polyline & t : div) {
result.push_back(t);
}
}
return result;
}
int main(int, char *[])
{
Board board;
Board::disableLineWidthScaling();
Style::setDefaultFillColor(Color::Null);
Style::setDefaultLineCap(RoundCap);
Style::setDefaultLineWidth(1);
board.setLineWidth(0.1);
board.setPenColor(Color::Blue);
board.setFillColor(Color::Red);
std::vector<Polyline> result;
// result.push_back(triangle(Point(0, 0), Point(500, 500), Point(0, 1000)));
// result.push_back(triangle(Point(1000, 0), Point(500, 500), Point(0, 00)));
// result.push_back(triangle(Point(1000, 1000), Point(500, 500), Point(1000, 0)));
// result.push_back(triangle(Point(0, 1000), Point(500, 500), Point(1000, 1000)));
result.push_back(triangle(Point(0, 0), Point(500, 500), Point(0, 1000)));
result.push_back(triangle(Point(500, 500), Point(0, 0), Point(1000, 0)));
result.push_back(triangle(Point(1000, 1000), Point(500, 500), Point(1000, 0)));
result.push_back(triangle(Point(500, 500), Point(1000, 1000), Point(0, 1000)));
auto seed = time(nullptr);
std::cout << "SEED: " << seed << std::endl;
Tools::initBoardRand(seed);
int n = 3;
while (n--) {
result = divided(result, Division(Tools::boardRand() % 4));
}
// board << divided(t, DivTriangle);
// board << divided(t, DivVertexA);
board << result;
board.saveSVG("triangles.svg", PageSize::BoundingBox);
// system("svgviewer triangles.svg");
}
Declaration of the Board class.
int main(int argc, char *argv[])
Definition arithmetic.cpp:16
Definition Board.h:55
Path mix(const Path &a, const Path &b, double time)
Interpolate two paths according to a time (0 is a, 1 is b)
Definition Path.cpp:390
Polyline triangle(const Point &p1, const Point &p2, const Point &p3, Color penColor=Style::defaultPenColor(), Color fillColor=Style::defaultFillColor(), double lineWidth=Style::defaultLineWidth(), const LineStyle lineStyle=Style::defaultLineStyle(), const LineCap cap=Style::defaultLineCap(), const LineJoin join=Style::defaultLineJoin())
Definition Polyline.cpp:610
Class for EPS, FIG or SVG drawings.
Definition Board.h:61
Board & setPenColor(const Color &color)
Definition Board.cpp:244
Board & setFillColor(const Color &color)
Definition Board.cpp:268
Board & setLineWidth(double width)
Definition Board.cpp:274
void saveSVG(const char *filename, PageSize size=PageSize::BoundingBox, double margin=0.0, Unit unit=Unit::Millimeter) const
Definition Board.cpp:765
bool isClosed() const
Is the path closed?
Definition Path.h:433
Struct representing a 2D point.
Definition Point.h:42
A polygonal line described by a series of 2D points.
Definition Polyline.h:38
const Path & path() const
Definition Polyline.h:461
std::size_t vertexCount() const
Definition Polyline.h:456
ShapeList & push_back(Shape *shape)
Definition ShapeList.cpp:427
std::vector< Polyline > divided(const Polyline &t, Division division)
Definition triangles.cpp:24
Division
Definition triangles.cpp:17
@ DivVertexB
Definition triangles.cpp:20
@ DivTriangle
Definition triangles.cpp:18
@ DivVertexA
Definition triangles.cpp:19
@ DivVertexC
Definition triangles.cpp:21