Program Listing for File BoundaryStrategy.cpp

Program Listing for File BoundaryStrategy.cpp#

Return to documentation for file (src\BoundaryStrategy.cpp)

#include <cmath>
#include "BoundaryStrategy.h"

double ToroidalBoundaryStrategy::distance(const Point &p1, const Point &p2)
{
    double x_dist = 0;
    double y_dist = 0;

    if (std::abs(p1.x - p2.x) > side_x - std::abs(p1.x - p2.x)) {
        x_dist = side_x - std::abs(p1.x - p2.x);
    }
    else {
        x_dist = std::abs(p1.x - p2.x);
    }

    if (std::abs(p1.y - p2.y) > side_y - std::abs(p1.y - p2.y)) {
        y_dist = side_y - std::abs(p1.y - p2.y);
    }
    else {
        y_dist = std::abs(p1.y - p2.y);
    }

    return std::sqrt((x_dist * x_dist) + (y_dist * y_dist));
}

Point ToroidalBoundaryStrategy::relative_pos(const Point &p1, const Point &p2)
{
    Point t2=p2;
    if (2*(p2.x - p1.x) > side_x) {
        t2.x = p2.x - side_x;
    }
    if (2*(p1.x - p2.x) > side_x) {
        t2.x = p2.x + side_x;
    }
    if (2*(p2.y - p1.y) > side_y) {
        t2.y = p2.y - side_y;
    }
    if (2*(p1.y - p2.y) > side_y) {
        t2.y = p2.y + side_y;
    }
    return t2;
}

double EdgeBoundaryStrategy::distance(const Point &p1, const Point &p2)
{
    return std::sqrt(std::pow(p2.x - p1.x, 2) + std::pow(p2.y - p1.y, 2));
}

Point EdgeBoundaryStrategy::relative_pos(const Point &p1, const Point &p2)
{
    return p2;
}