MCPcopy Create free account
hub / github.com/TheForceEngine/TheForceEngine / Minkowski

Function Minkowski

TheForceEngine/TFE_Polygon/clipper.cpp:4470–4511  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

4468//------------------------------------------------------------------------------
4469
4470void Minkowski(const Path& poly, const Path& path,
4471 Paths& solution, bool isSum, bool isClosed)
4472{
4473 int delta = (isClosed ? 1 : 0);
4474 size_t polyCnt = poly.size();
4475 size_t pathCnt = path.size();
4476 Paths pp;
4477 pp.reserve(pathCnt);
4478 if (isSum)
4479 for (size_t i = 0; i < pathCnt; ++i)
4480 {
4481 Path p;
4482 p.reserve(polyCnt);
4483 for (size_t j = 0; j < poly.size(); ++j)
4484 p.push_back(IntPoint(path[i].X + poly[j].X, path[i].Y + poly[j].Y));
4485 pp.push_back(p);
4486 }
4487 else
4488 for (size_t i = 0; i < pathCnt; ++i)
4489 {
4490 Path p;
4491 p.reserve(polyCnt);
4492 for (size_t j = 0; j < poly.size(); ++j)
4493 p.push_back(IntPoint(path[i].X - poly[j].X, path[i].Y - poly[j].Y));
4494 pp.push_back(p);
4495 }
4496
4497 solution.clear();
4498 solution.reserve((pathCnt + delta) * (polyCnt + 1));
4499 for (size_t i = 0; i < pathCnt - 1 + delta; ++i)
4500 for (size_t j = 0; j < polyCnt; ++j)
4501 {
4502 Path quad;
4503 quad.reserve(4);
4504 quad.push_back(pp[i % pathCnt][j % polyCnt]);
4505 quad.push_back(pp[(i + 1) % pathCnt][j % polyCnt]);
4506 quad.push_back(pp[(i + 1) % pathCnt][(j + 1) % polyCnt]);
4507 quad.push_back(pp[i % pathCnt][(j + 1) % polyCnt]);
4508 if (!Orientation(quad)) ReversePath(quad);
4509 solution.push_back(quad);
4510 }
4511}
4512//------------------------------------------------------------------------------
4513
4514void MinkowskiSum(const Path& pattern, const Path& path, Paths& solution, bool pathIsClosed)

Callers 2

MinkowskiSumFunction · 0.85
MinkowskiDiffFunction · 0.85

Calls 7

IntPointClass · 0.85
OrientationFunction · 0.85
ReversePathFunction · 0.85
reserveMethod · 0.80
push_backMethod · 0.80
sizeMethod · 0.45
clearMethod · 0.45

Tested by

no test coverage detected