Added regular polygons and started implementation of arbitrary (general)
polygons
This commit is contained in:
parent
4a7e5834d3
commit
bf9545a7a0
@ -46,3 +46,34 @@ polygon poly_generate::triangle(
|
||||
one_over_36 * mass * base * std::pow(height, 3),
|
||||
mass};
|
||||
}
|
||||
|
||||
polygon poly_generate::regular(double radius, uint n_sides, double mass) {
|
||||
assert(n_sides > 2);
|
||||
std::vector<vec2d> points;
|
||||
points.reserve(n_sides);
|
||||
double theta = 2 * M_PI / n_sides;
|
||||
|
||||
for (uint i = 0; i < n_sides; i++)
|
||||
points.push_back({radius * cos(i * theta), radius * sin(i * theta)});
|
||||
|
||||
double l = vec2d::norm(points[1] - points[0]);
|
||||
|
||||
double sin_, cos_;
|
||||
sincos(M_PI / n_sides, &sin_, &cos_);
|
||||
double cot = cos_ / sin_;
|
||||
|
||||
double inertia = mass * l * l / 24 * (1 + 3 * cot * cot);
|
||||
return polygon{{0, 0}, 0, points, inertia, mass};
|
||||
}
|
||||
|
||||
static double intertia_of_polygon_subtriangle(
|
||||
vec2d& centroid, vec2d& p1, vec2d& p2) {
|
||||
double base, height;
|
||||
if (vec2d::norm(p1 - centroid) > vec2d::norm(p2 - centroid))
|
||||
base = vec2d::norm(p1 - centroid);
|
||||
}
|
||||
|
||||
polygon poly_generate::general(std::vector<vec2d>& points, double mass) {
|
||||
double intertia = 0;
|
||||
return polygon{{0, 0}, 0, points, intertia, mass};
|
||||
}
|
||||
|
@ -16,5 +16,9 @@ namespace poly_generate {
|
||||
|
||||
polygon triangle(double side1, double side2, double angle, double mass = 1);
|
||||
|
||||
polygon regular(double radius, uint n_sides, double mass = 1);
|
||||
|
||||
polygon general(std::vector<vec2d>& points, double mass = 1);
|
||||
|
||||
}; // namespace poly_generate
|
||||
#endif
|
||||
|
Loading…
Reference in New Issue
Block a user