Java 获取一点和另一点之间的角度(三角函数)
我得2分。基点和其他点。我需要得到一个角度,在这个角度上,基座应该移动,使另一个点和它相对。但可能性是从0到360度,而不仅仅是90度。Java 获取一点和另一点之间的角度(三角函数),java,trigonometry,Java,Trigonometry,我得2分。基点和其他点。我需要得到一个角度,在这个角度上,基座应该移动,使另一个点和它相对。但可能性是从0到360度,而不仅仅是90度。 我现在应该用三角学来做,但我不知道怎么做。有人能解释一下我应该使用什么算法吗?还是粘贴溶液?谢谢,这确实是一个三角学问题,但听起来你基本上想要红色和黑色圆点之间的角度,然后再加上180度 然而: 数学atan2(y,x) 这里可以帮助你,因为你可以给它x坐标和y坐标的差,以得到一个角度(弧度) 你真的应该查一下trig,因为你可以在10分钟左右学会基本的东西
我现在应该用三角学来做,但我不知道怎么做。有人能解释一下我应该使用什么算法吗?还是粘贴溶液?谢谢,这确实是一个三角学问题,但听起来你基本上想要红色和黑色圆点之间的角度,然后再加上180度 然而: 数学atan2(y,x) 这里可以帮助你,因为你可以给它x坐标和y坐标的差,以得到一个角度(弧度) 你真的应该查一下trig,因为你可以在10分钟左右学会基本的东西。
“SOH-CAH-TOA”对你的一生都很有用。这确实是一个三角学问题,但听起来你基本上想要红色和黑色圆点之间的角度,然后再加上180度 然而: 数学atan2(y,x) 这里可以帮助你,因为你可以给它x坐标和y坐标的差,以得到一个角度(弧度) 你真的应该查一下trig,因为你可以在10分钟左右学会基本的东西。
“SOH-CAH-TOA”对你的一生都很有用。用这些点画一个直角三角形,然后看角度。如果您知道点的坐标,您将能够找到角度,因为您知道tringles的边 总的来说,应该是这样的:
double alpha = Math.atan((yb - yp) / (xb - xp));
在哪里
xb,yb是基点的坐标
xp,yp是红点的坐标
alpha
的单位是弧度,而不是度
请注意,
atan
将值从-pi/2
返回到pi/2
使用这些点绘制直角三角形并查看角度。如果您知道点的坐标,您将能够找到角度,因为您知道tringles的边
总的来说,应该是这样的:
double alpha = Math.atan((yb - yp) / (xb - xp));
在哪里
xb,yb是基点的坐标
xp,yp是红点的坐标
alpha
的单位是弧度,而不是度
请注意,
atan
返回从-pi/2
到pi/2的值,可以通过执行以下操作获得角度:angle=Math.acos(单位向量(a).单位向量(b)),其中a和b分别是基点和初始方向之间的向量,以及基点和其他点之间的向量('.'代表点积)
如果希望角度以度为单位,请执行以下操作:angle=(angle*180/Math.PI)
如果您不懂向量,也不懂Java,请阅读以下内容:
您需要以下信息:
基点的坐标。(表示为点对象基点,具有x和y)
其他点的坐标。(其他点)
基点最初指向的位置的坐标。(初始点)
(向量有两个分量,x和y。为具有双x和y的向量声明一个类,或使用点)
在图中,如果需要向量(a),则执行newVector(基点、初始方向)强>
类似地,向量(b)=新向量(基点,其他点)
在图中,如果需要单位向量(a),请执行单位向量(向量(a))
在图中,如果您想要单位向量(a)。单位向量(b),do dotProduct(单位向量(a),单位向量(b))可以通过do:angle=Math.acos(单位向量(a)。单位向量(b))获得角度,其中a和b分别是基点和初始方向之间的向量,以及基点和其他点之间的向量(“.”代表dot产品)
如果希望角度以度为单位,请执行以下操作:angle=(angle*180/Math.PI)
如果您不懂向量,也不懂Java,请阅读以下内容:
您需要以下信息:
基点的坐标。(表示为点对象基点,具有x和y)
其他点的坐标。(其他点)
基点最初指向的位置的坐标。(初始点)
(向量有两个分量,x和y。为具有双x和y的向量声明一个类,或使用点)
在图中,如果需要向量(a),请执行newVector(基点、初始方向);
类似地,向量(b)=新向量(基点,其他点)
在图中,如果需要单位向量(a),请执行单位向量(向量(a))
在图中,如果需要单位向量(a)。单位向量(b),则执行点积(单位向量(a),单位向量(b))你所说的相反是什么意思?一个点可以有一个在无限方向上相反的点..p这是离题的,因为它本质上是一个数学问题。我建议买一本好的教材,涵盖三角学…与我画的线相反。这条线总是在北向(o度)你说的相反是什么意思?一个点可以有一个在无限方向上相反的点..这是一个离题的问题,因为它本质上是一个数学问题。我建议买一本好的教科书,涵盖三角学…与我画的线相反。这条线总是在北向(o度)那么,我应该如何将结果转换为度呢?只使用toDegrees()。@MichałTabor,是的,你可以使用数学。doDegrees(alpha)
我按照你说的做了,但它没有返回正确的值。我尝试向它添加90,在这种情况下,当红点位于II和IV四分之一时,我得到了正确的值,但在I和III中,我得到了错误的值。。。(我在最左边)。@MichałTabor,用代码和错误案例更新你的问题。第三和第四季度你必须调整,注意我答案中的最后一行。那么我应该如何将结果转换为度?只使用toDegrees()。@MichałTabor,是的,你可以使用Math.doDegrees(alpha)
我按照你说的做了,但没有
unitVector(vector a)
{
vector new1 = new vector(0,0);
new.x = a.x/(Math.sqrt(a.x*a.x + a.y*a.y));
new.x = a.y/(Math.sqrt(a.x*a.x + a.y*a.y));
return new1;
}
dotProduct(vector a, vector b)
{
double val;
val = a.x*b.x + a.y*b.y;
return val;
}