Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- #include <cmath>
- long long rectangle_rotation(int a, int b)
- {
- // TODO: fix mistakes while calculating big coords
- std::cout << a << '\t' << b << '\n';
- std::vector<std::pair<double, double>> coords;
- coords.emplace_back(-a/2*cos(M_PI/4) - b/2*sin(M_PI/4), -a/2*sin(M_PI/4) + b/2*cos(M_PI/4));
- coords.emplace_back(-a/2*cos(M_PI/4) + b/2*sin(M_PI/4), -a/2*sin(M_PI/4) - b/2*cos(M_PI/4));
- coords.emplace_back((-1)*(coords[0].first), (-1)*(coords[0].second));
- coords.emplace_back((-1)*(coords[1].first), (-1)*(coords[1].second));
- for (auto& i : coords)
- std::cout << i.first << '\t' << i.second << '\n';
- double left_edge = coords[0].first;
- double right_edge = -1*left_edge;
- double subEdgeLeft = (a > b) ? coords.at(1).first : coords.at(3).first;
- double subEdgeRight = (a > b) ? coords.at(3).first : coords.at(1).first;
- double b03 = coords.at(3).second - coords.at(3).first;
- double b01 = coords.at(0).second + coords.at(0).first;
- double b32 = -b01;
- double b12 = -b03;
- long long counter {0};
- int initX = static_cast<int>(floor(left_edge + 1));
- for (; initX <= subEdgeLeft; initX += 1)
- for (auto coordY = static_cast<int>(floor(initX + b03)); coordY >= -initX + b01; coordY -= 1)
- counter++;
- if (a > b)
- {
- for (; initX <= subEdgeRight; initX += 1)
- for (auto coordY = static_cast<long>(floor(initX + b03)); coordY >= initX + b12; coordY -= 1)
- counter++;
- for (; initX <= right_edge; initX += 1)
- for (auto coordY = static_cast<long>(floor(-initX + b32)); coordY >= initX + b12; coordY -= 1)
- counter++;
- }
- else
- {
- for (; initX <= subEdgeRight; initX += 1)
- for (auto coordY = static_cast<long>(floor(-initX + b32)); coordY >= -initX + b01; coordY -= 1)
- counter++;
- for (; initX <= right_edge; initX += 1)
- for (auto coordY = static_cast<long>(floor(-initX + b32)); coordY >= initX + b12; coordY -= 1)
- counter++;
- }
- return counter; // Do your magic!
- }
- int main()
- {
- rectangle_rotation(3706,6632);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment