This repository has been archived on 2020-04-08. You can view files and clone it, but cannot push or open issues or pull requests.
Files
Indoor/wifi/estimate/ray3/Cylinder.h
frank 9e6d9f4ce7 added support for pillars
some new helper methods/classes
2018-05-22 11:45:35 +02:00

83 lines
1.4 KiB
C++

#ifndef CYLINDER_H
#define CYLINDER_H
#include "../../../math/Matrix4.h"
#include "Mesh.h"
namespace Ray3D {
/** walled cylinder */
class Cylinder : public Mesh {
public:
/** ctor */
Cylinder() {
;
}
/** get a transformed version */
Cylinder transformed(const Matrix4& mat) const {
Cylinder res = *this;
res.transform(mat);
return res;
}
/** build */
void add(const float rOuter, const float h, bool topAndBottom) {
const int tiles = 8;
const float deg_per_tile = 360.0f / tiles;
const float rad_per_tile = deg_per_tile / 180.0f * M_PI;
for (int i = 0; i < tiles; ++i) {
const float startRad = (i+0) * rad_per_tile;
const float endRad = (i+1) * rad_per_tile;
const float xo0 = std::cos(startRad) * rOuter;
const float yo0 = std::sin(startRad) * rOuter;
const float xo1 = std::cos(endRad) * rOuter;
const float yo1 = std::sin(endRad) * rOuter;
const float cx = 0;
const float cy = 0;
// outer
addQuad(
Point3(xo0, yo0, -h),
Point3(xo1, yo1, -h),
Point3(xo1, yo1, +h),
Point3(xo0, yo0, +h)
);
if (topAndBottom) {
// top
addTriangle(
Point3(cx, cy, h),
Point3(xo0, yo0, h),
Point3(xo1, yo1, h)
);
// bottom
addTriangle(
Point3(cx, cy, -h),
Point3(xo1, yo1, -h),
Point3(xo0, yo0, -h)
);
}
}
}
};
}
#endif // CYLINDER_H