如何在Java中将三角计算推广到四象限图
我有一个在x轴和y轴上允许-ve值的图形,因此该图形可以被视为有四个象限,其中x,y图可以被视为一个从0到360逆时针的角度,这样x=100,y=0将是角度0,x=0,y=100将是角度90,x=-100,y=0将是角度180,x=0,y=-100将是角度270 给定一个x和y的值,我想计算角度,从这里开始,给定一个x=30,y=60,我可以做如何在Java中将三角计算推广到四象限图,java,math,trigonometry,Java,Math,Trigonometry,我有一个在x轴和y轴上允许-ve值的图形,因此该图形可以被视为有四个象限,其中x,y图可以被视为一个从0到360逆时针的角度,这样x=100,y=0将是角度0,x=0,y=100将是角度90,x=-100,y=0将是角度180,x=0,y=-100将是角度270 给定一个x和y的值,我想计算角度,从这里开始,给定一个x=30,y=60,我可以做 Math.toDegrees(Math.atan((double)y/x)); i、 e 给予 63.434 但是如何用负数推广这项工作,也就是说,
Math.toDegrees(Math.atan((double)y/x));
i、 e
给予
63.434
但是如何用负数推广这项工作,也就是说,如果y=60,x=-30,那么答案应该是116.56。如果y=-60和x=-30,那么它将是206.56
我在用Java
我之所以逆时针走,是因为我试图实现的算法,他们这样做似乎是逆时针的
我发现有些东西是用下面的笨重的方式工作的
if(x> 0 & y> 0)
{
angle= (Math.toDegrees(Math.atan((double)Math.abs(y)/ Math.abs(x))));
}
else if(x< 0 & y> 0)
{
angle= (Math.toDegrees(Math.atan((double)Math.abs(x)/ Math.abs(y)))) + 90;
}
else if(x< 0 & y< 0)
{
angle= (Math.toDegrees(Math.atan((double)Math.abs(y)/ Math.abs(x)))) + 180;
}
else if(x> 0 & y< 0)
{
angle= (Math.toDegrees(Math.atan((double)Math.abs(x)/ Math.abs(y)))) + 270;
}
if(x>0&y>0)
{
角度=(Math.toDegrees(Math.atan((double)Math.abs(y)/Math.abs(x));
}
否则如果(x<0&y>0)
{
角度=(Math.toDegrees(Math.atan((双)Math.abs(x)/Math.abs(y))+90;
}
else if(x<0&y<0)
{
角度=(Math.toDegrees(Math.atan((双)Math.abs(y)/Math.abs(x))+180;
}
否则如果(x>0&y<0)
{
角度=(Math.toDegrees(Math.atan((双)Math.abs(x)/Math.abs(y))+270;
}
可能重复@NicoSchertler您可能是对的,看来我应该使用atan2而不是atan。
if(x> 0 & y> 0)
{
angle= (Math.toDegrees(Math.atan((double)Math.abs(y)/ Math.abs(x))));
}
else if(x< 0 & y> 0)
{
angle= (Math.toDegrees(Math.atan((double)Math.abs(x)/ Math.abs(y)))) + 90;
}
else if(x< 0 & y< 0)
{
angle= (Math.toDegrees(Math.atan((double)Math.abs(y)/ Math.abs(x)))) + 180;
}
else if(x> 0 & y< 0)
{
angle= (Math.toDegrees(Math.atan((double)Math.abs(x)/ Math.abs(y)))) + 270;
}