Math 从x轴矢量计算角度(梯度)

Math 从x轴矢量计算角度(梯度),math,vector,2d,gradient,trigonometry,Math,Vector,2d,Gradient,Trigonometry,在cathesian 2D系统中有两点,它们都给出了向量的起点和终点。现在我需要新向量和x轴之间的角度 我知道梯度=(y2-y1)/(x2-x1),我知道角度=弧tan(梯度) 但我不知道这是否适用于向量所采用的每种情况(方向)。 我什么时候需要增加180度或者类似的角度 任何人都可以为我提供一些类似c/java的代码或所有情况的提示 Thx和best问候您可以使用点积(),但将其全部简化,最终只需获取向量端点的反正切,即可获得向量与x轴之间的角度。Atan函数通常以[-pi,pi]或[-180

在cathesian 2D系统中有两点,它们都给出了向量的起点和终点。现在我需要新向量和x轴之间的角度

我知道梯度=(y2-y1)/(x2-x1),我知道角度=弧tan(梯度)

但我不知道这是否适用于向量所采用的每种情况(方向)。 我什么时候需要增加180度或者类似的角度


任何人都可以为我提供一些类似c/java的代码或所有情况的提示


Thx和best问候

您可以使用点积(),但将其全部简化,最终只需获取向量端点的反正切,即可获得向量与x轴之间的角度。Atan函数通常以[-pi,pi]或[-180180]的顺序返回,因此如果要确保它正确包装,则需要检查向量的y分量是否为负。在C中,可以使用atan2而不是atan,它将使用每个组件的符号来计算角度()的符号

例如,如果有矢量点start=和end=,则通过从端点减去起点将其调整回原点,从而得到。所以你看到的是这一点。与x轴的角度为atan2(y,x),atan2(-7,-6),即-130.6

double x = -6;
double y = -7;

fprintf(stderr,"angle is %.2f\n",atan2(y,x)*180/3.14159);

角度为-130.60

因此,总结一下,当您有一个2D xy矢量,并且需要找到与正X轴成0\360度角时,您可以执行以下操作:

const float RAD2DEG = 180.0f / 3.14159f;

float x = -4.0f;
float y =  3.2f;

// atan2 receives first Y second X
double angle = atan2(y, x) * RAD2DEG;
if (angle < 0) angle += 360.0f;
const float RAD2DEG=180.0f/3.14159f;
浮动x=-4.0f;
浮动y=3.2f;
//atan2接收第一个Y第二个X
双角度=atan2(y,x)*RAD2DEG;
如果(角度<0)角度+=360.0f;

“谁能给我提供一些类似c/java的代码”不是问题。向我们展示一些代码,描述您的困难,我们将帮助您改进。长话短说的可能重复-您需要atan2。