Ja bym użył kątów. Zamiast asin skorzystałbym z acos i funkcji sgn do zdefiniowania kierunku w taki sposób.
#include <iostream>
#include <math.h>
using namespace std;
double sgn(double g)
{
if(g>0) return 1;
else if(g==0) return 0;
return -1; // (g<0)
}
void kat(double x, double y) // przyjmuje skladowe wektora
{
cout<<"( "<<x<<", "<<y<<" ) ----> fi = ";
cout<<acos(x/sqrt(x*x+y*y))*sgn(y)*180/3.14;
cout<<endl;
}
int main()
{
kat(1,1);
kat(1,0);
kat(0,1);
kat(0,0.01);
kat(4,4);
kat(4,6);
kat(-4,6);
kat(-4,-6);
kat(4,-6);
return 0;
}
Znaki współrzędnych wektora są już uwzględnione w funkcji sgn i teraz możesz sobie robić przedziały kątów od ile do ile.