Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Java中将三角计算推广到四象限图_Java_Math_Trigonometry - Fatal编程技术网

如何在Java中将三角计算推广到四象限图

如何在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 但是如何用负数推广这项工作,也就是说,

我有一个在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
但是如何用负数推广这项工作,也就是说,如果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;
        }