| 4468 | //------------------------------------------------------------------------------ |
| 4469 | |
| 4470 | void 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 | |
| 4514 | void MinkowskiSum(const Path& pattern, const Path& path, Paths& solution, bool pathIsClosed) |
no test coverage detected