1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131
|
//-----------------------------------------------------------------------------
/** @file libpentobi_base/TrigonTransform.cpp
@author Markus Enzenberger
@copyright GNU General Public License version 3 or later */
//-----------------------------------------------------------------------------
#include "TrigonTransform.h"
#include <cmath>
namespace libpentobi_base {
//-----------------------------------------------------------------------------
CoordPoint TransfTrigonIdentity::get_transformed(CoordPoint p) const
{
return p;
}
//-----------------------------------------------------------------------------
CoordPoint TransfTrigonRefl::get_transformed(CoordPoint p) const
{
return {-p.x, p.y};
}
//-----------------------------------------------------------------------------
CoordPoint TransfTrigonRot60::get_transformed(CoordPoint p) const
{
auto px = static_cast<float>(p.x);
auto py = static_cast<float>(p.y);
auto x = static_cast<int>(std::ceil(0.5f * px - 1.5f * py));
auto y = static_cast<int>(std::floor(0.5f * px + 0.5f * py));
return {x, y};
}
//-----------------------------------------------------------------------------
CoordPoint TransfTrigonRot120::get_transformed(CoordPoint p) const
{
auto px = static_cast<float>(p.x);
auto py = static_cast<float>(p.y);
auto x = static_cast<int>(std::ceil(-0.5f * px - 1.5f * py));
auto y = static_cast<int>(std::ceil(0.5f * px - 0.5f * py));
return {x, y};
}
//-----------------------------------------------------------------------------
CoordPoint TransfTrigonRot180::get_transformed(CoordPoint p) const
{
return {-p.x, -p.y};
}
//-----------------------------------------------------------------------------
CoordPoint TransfTrigonRot240::get_transformed(CoordPoint p) const
{
auto px = static_cast<float>(p.x);
auto py = static_cast<float>(p.y);
auto x = static_cast<int>(std::floor(-0.5f * px + 1.5f * py));
auto y = static_cast<int>(std::ceil(-0.5f * px - 0.5f * py));
return {x, y};
}
//-----------------------------------------------------------------------------
CoordPoint TransfTrigonRot300::get_transformed(CoordPoint p) const
{
auto px = static_cast<float>(p.x);
auto py = static_cast<float>(p.y);
auto x = static_cast<int>(std::floor(0.5f * px + 1.5f * py));
auto y = static_cast<int>(std::floor(-0.5f * px + 0.5f * py));
return {x, y};
}
//-----------------------------------------------------------------------------
CoordPoint TransfTrigonReflRot60::get_transformed(CoordPoint p) const
{
auto px = static_cast<float>(p.x);
auto py = static_cast<float>(p.y);
auto x = static_cast<int>(std::ceil(0.5f * (-px) - 1.5f * py));
auto y = static_cast<int>(std::floor(0.5f * (-px) + 0.5f * py));
return {x, y};
}
//-----------------------------------------------------------------------------
CoordPoint TransfTrigonReflRot120::get_transformed(CoordPoint p) const
{
auto px = static_cast<float>(p.x);
auto py = static_cast<float>(p.y);
auto x = static_cast<int>(std::ceil(-0.5f * (-px) - 1.5f * py));
auto y = static_cast<int>(std::ceil(0.5f * (-px) - 0.5f * py));
return {x, y};
}
//-----------------------------------------------------------------------------
CoordPoint TransfTrigonReflRot180::get_transformed(CoordPoint p) const
{
return {p.x, -p.y};
}
//-----------------------------------------------------------------------------
CoordPoint TransfTrigonReflRot240::get_transformed(CoordPoint p) const
{
auto px = static_cast<float>(p.x);
auto py = static_cast<float>(p.y);
auto x = static_cast<int>(std::floor(-0.5f * (-px) + 1.5f * py));
auto y = static_cast<int>(std::ceil(-0.5f * (-px) - 0.5f * py));
return {x, y};
}
//-----------------------------------------------------------------------------
CoordPoint TransfTrigonReflRot300::get_transformed(CoordPoint p) const
{
auto px = static_cast<float>(p.x);
auto py = static_cast<float>(p.y);
auto x = static_cast<int>(std::floor(0.5f * (-px) + 1.5f * py));
auto y = static_cast<int>(std::floor(-0.5f * (-px) + 0.5f * py));
return {x, y};
}
//-----------------------------------------------------------------------------
} // namespace libpentobi_base
|