首先,我想问的是向顺时针方向或逆时针方向测量矢量之间的角度?你能说明吗?
我需要计算我将从3点创建的向量之间的角度。我需要角度介于0到360度之间,并始终以相同方向测量。
我该怎么做?
我将使用它来找到使其成直角...垂直所需的角度。 方向很重要的原因是我将从相同的原点开始两次,矢量垂直于90,另一个垂直于270.因此,如果它仅测量最小角度,我将不知道我是否需要加或减一个角度。
测量矢量0-1和0-3之间的角度
测量矢量0-1和0-2之间的角度
0-2需要逆时针90度到0-1
0-3需要逆时针270度到0-1(顺时针90度)
我知道点数的顺序。 2总是需要90 CCW,3需要270 CCW但点可以在任何地方。
希望这是有道理的,并提前多多感谢。
试图画一幅画,但由于“声誉”而不会让我加载
答案 0 :(得分:2)
首先,逆时针测量角度。
然后,如果你有两个向量,计算角度是:
const double pi = std::atan(1.0) * 4;
struct vect2D { // of course you could use vectors if you prefer
double x;
double y;
double operator*(vect2D& e) { return x*e.x + y*e.y; } // scalar product of 2 vectors
double dist() { return sqrt(x*x + y*y); } // length
};
double prd_vect(vect2D& u, vect2D& v)
{
return u.x*v.y - u.y*v.x;
}
double angle_rad(vect2D& u, vect2D& v)
{
return (prd_vect(u,v)<0 ? -1:1) * acos(u*v / (u.dist()*v.dist()));
}
double angle_deg(vect2D& u, vect2D& v)
{
return angle_rad(u,v) / pi * 180 ;
}
演示如何使用它:
vect2D u{ 1, 0 }, v{ -1, 0 };
cout << " angle in degrees : " << angle_deg(u,v) << endl;
补充说明:如果标量乘积为0,则两个非零向量v和w是正交的(+ 90°或-90°)。
因此,如果你有一个给定的向量v并且有一个固定的点M和一个所需的长度,那么用一些基本的数学和上面的公式来计算N的位置应该相对容易,使得MN与v正交。