57 lines
1.3 KiB
C++
57 lines
1.3 KiB
C++
#include "all_includes.hh"
|
|
|
|
Quad::Quad() {}
|
|
|
|
Quad::Quad(Vertex ne, Vertex se, Vertex sw, Vertex nw) {
|
|
corner[NE] = ne;
|
|
corner[SE] = se;
|
|
corner[SW] = sw;
|
|
corner[NW] = nw;
|
|
}
|
|
|
|
void Quad::offset(/*Cardinal*/int side, int offset) {
|
|
Vertex voffset = (corner[NE + side]-corner[NW + side]).perpendicular().setNorm(offset);
|
|
corner[NE + side] = corner[NE + side] + voffset.projectOn(corner[NE + side]-corner[SE + side]);
|
|
corner[NW + side] = corner[NW + side] + voffset.projectOn(corner[NW + side]-corner[SW + side]);
|
|
}
|
|
|
|
int Quad::minLength() {
|
|
return std::min(
|
|
std::min(
|
|
Segment(corner[NE],corner[SE]).length(),
|
|
Segment(corner[SE],corner[SW]).length()
|
|
), std::min(
|
|
Segment(corner[SW],corner[NW]).length(),
|
|
Segment(corner[NW],corner[NE]).length()
|
|
)
|
|
);
|
|
}
|
|
|
|
int Quad::maxLength() {
|
|
return std::max(
|
|
std::max(
|
|
Segment(corner[NE],corner[SE]).length(),
|
|
Segment(corner[SE],corner[SW]).length()
|
|
), std::max(
|
|
Segment(corner[SW],corner[NW]).length(),
|
|
Segment(corner[NW],corner[NE]).length()
|
|
)
|
|
);
|
|
}
|
|
|
|
float Quad::minAngle() {
|
|
float a = 370; // > 360.
|
|
for (int i = 0; i < 4; i++) {
|
|
a = std::min(a, Triangle(corner[NE+i], corner[SE+i], corner[SW+i]).angle());
|
|
}
|
|
return a;
|
|
}
|
|
|
|
float Quad::maxAngle() {
|
|
float a = 0;
|
|
for (int i = 0; i < 4; i++) {
|
|
a = std::max(a, Triangle(corner[NE+i], corner[SE+i], corner[SW+i]).angle());
|
|
}
|
|
return a;
|
|
}
|