#include <iostream>
#include <cmath>
namespace so
{
struct _point_2d_
{
float x{};
float y{};
};
struct _line_2d_
{
_point_2d_ start{};
_point_2d_ end{};
};
_line_2d_ create_arrow(float _angle_delta, float _length, _line_2d_ const & _base)
{
float angle_arrow_{std::atan2(_base.end.y - _base.start.y, _base.end.x - _base.start.x) + _angle_delta};
_line_2d_ line_arrow_{};
line_arrow_.start.x = _base.end.x;
line_arrow_.start.y = _base.end.y;
line_arrow_.end.x = line_arrow_.start.x + _length * std::cos(angle_arrow_);
line_arrow_.end.y = line_arrow_.start.y + _length * std::sin(angle_arrow_);
return (line_arrow_);
}
}
int main()
{
so::_line_2d_ base_{};
float angle_delta_{0.5236f};
float length_{1.0f};
base_.start.x = 1.0f;
base_.start.y = 1.0f;
base_.end.x = -1.0f;
base_.end.y = 1.0f;
so::_line_2d_ arrow_counter{so::create_arrow(3.1416f - angle_delta_, length_, base_)};
std::cout << "(" << arrow_counter.start.x << ", " << arrow_counter.start.y << ") - (" << arrow_counter.end.x << ", "
<< arrow_counter.end.y << ")" << std::endl;
so::_line_2d_ arrow_clock{so::create_arrow(-3.1416f + angle_delta_, length_, base_)};
std::cout << "(" << arrow_clock.start.x << ", " << arrow_clock.start.y << ") - (" << arrow_clock.end.x << ", "
<< arrow_clock.end.y << ")" << std::endl;
return (0);
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y21hdGg+CgpuYW1lc3BhY2Ugc28KewpzdHJ1Y3QgX3BvaW50XzJkXwp7CiAgZmxvYXQgeHt9OwogIGZsb2F0IHl7fTsKfTsKCnN0cnVjdCBfbGluZV8yZF8KewogIF9wb2ludF8yZF8gc3RhcnR7fTsKICBfcG9pbnRfMmRfIGVuZHt9Owp9OwoKX2xpbmVfMmRfIGNyZWF0ZV9hcnJvdyhmbG9hdCBfYW5nbGVfZGVsdGEsIGZsb2F0IF9sZW5ndGgsIF9saW5lXzJkXyBjb25zdCAmIF9iYXNlKQp7CiBmbG9hdCBhbmdsZV9hcnJvd197c3RkOjphdGFuMihfYmFzZS5lbmQueSAtIF9iYXNlLnN0YXJ0LnksIF9iYXNlLmVuZC54IC0gX2Jhc2Uuc3RhcnQueCkgKyBfYW5nbGVfZGVsdGF9OwoKIF9saW5lXzJkXyBsaW5lX2Fycm93X3t9OwoKIGxpbmVfYXJyb3dfLnN0YXJ0LnggPSBfYmFzZS5lbmQueDsKIGxpbmVfYXJyb3dfLnN0YXJ0LnkgPSBfYmFzZS5lbmQueTsKCiBsaW5lX2Fycm93Xy5lbmQueCA9IGxpbmVfYXJyb3dfLnN0YXJ0LnggKyBfbGVuZ3RoICogc3RkOjpjb3MoYW5nbGVfYXJyb3dfKTsKIGxpbmVfYXJyb3dfLmVuZC55ID0gbGluZV9hcnJvd18uc3RhcnQueSArIF9sZW5ndGggKiBzdGQ6OnNpbihhbmdsZV9hcnJvd18pOwoKIHJldHVybiAobGluZV9hcnJvd18pOwp9Cn0KCmludCBtYWluKCkKewogc286Ol9saW5lXzJkXyBiYXNlX3t9OwogZmxvYXQgYW5nbGVfZGVsdGFfezAuNTIzNmZ9OwogZmxvYXQgbGVuZ3RoX3sxLjBmfTsKCiBiYXNlXy5zdGFydC54ID0gMS4wZjsKIGJhc2VfLnN0YXJ0LnkgPSAxLjBmOwogYmFzZV8uZW5kLnggPSAtMS4wZjsKIGJhc2VfLmVuZC55ID0gMS4wZjsKCiBzbzo6X2xpbmVfMmRfIGFycm93X2NvdW50ZXJ7c286OmNyZWF0ZV9hcnJvdygzLjE0MTZmIC0gYW5nbGVfZGVsdGFfLCBsZW5ndGhfLCBiYXNlXyl9OwoKIHN0ZDo6Y291dCA8PCAiKCIgPDwgYXJyb3dfY291bnRlci5zdGFydC54IDw8ICIsICIgPDwgYXJyb3dfY291bnRlci5zdGFydC55IDw8ICIpIC0gKCIgPDwgYXJyb3dfY291bnRlci5lbmQueCA8PCAiLCAiCiAgICAgICAgICAgPDwgYXJyb3dfY291bnRlci5lbmQueSA8PCAiKSIgPDwgc3RkOjplbmRsOwoKIHNvOjpfbGluZV8yZF8gYXJyb3dfY2xvY2t7c286OmNyZWF0ZV9hcnJvdygtMy4xNDE2ZiArIGFuZ2xlX2RlbHRhXywgbGVuZ3RoXywgYmFzZV8pfTsKCiBzdGQ6OmNvdXQgPDwgIigiIDw8IGFycm93X2Nsb2NrLnN0YXJ0LnggPDwgIiwgIiA8PCBhcnJvd19jbG9jay5zdGFydC55IDw8ICIpIC0gKCIgPDwgYXJyb3dfY2xvY2suZW5kLnggPDwgIiwgIgogICAgICAgICAgIDw8IGFycm93X2Nsb2NrLmVuZC55IDw8ICIpIiA8PCBzdGQ6OmVuZGw7CiAKIHJldHVybiAoMCk7Cn0=