Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/412.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
Javascript 笛卡尔坐标到极坐标_Javascript_Math_Geometry_Cartesian_Polar Coordinates - Fatal编程技术网

Javascript 笛卡尔坐标到极坐标

Javascript 笛卡尔坐标到极坐标,javascript,math,geometry,cartesian,polar-coordinates,Javascript,Math,Geometry,Cartesian,Polar Coordinates,请看下面的示例: 请看一下console.log,我在其中使用了以下两个主要功能: function distanceBetween2pts(x1, y1, x2, y2) { console.log("Particle: ("+x1+","+y1+") Mouse: ("+x2+","+y2+")"); // Pythagoras Theorem // PQ = sqrt( (x2-x1)^2 + (y2-y1)^2 )

请看下面的示例:

请看一下console.log,我在其中使用了以下两个主要功能:

    function distanceBetween2pts(x1, y1, x2, y2) {
        console.log("Particle: ("+x1+","+y1+") Mouse: ("+x2+","+y2+")");
        //  Pythagoras Theorem
        // PQ = sqrt( (x2-x1)^2 + (y2-y1)^2 )
        var x = (x2-x1);
        var y = (y2-y1);

        this.radius = Math.sqrt(x*x + y*y);
        this.x = x;
        this.y = y;
    }

    function polar2cartesian(R, theta) {
        this.x = R * Math.cos(theta);
        this.y= R * Math.sin(theta);
    }
其中,当鼠标位于粒子(中心圆)的上方和右侧时,例如:

控制台日志显示:

Particle: (300,250) Mouse: (326,223)
artan(-27 / 26) = angle: -46.08092418666069 - theta -0.8042638494191191
其中应为arctan(27/26)=角度:46:θ=0.8。因为即使鼠标“在”中心上方,它也会将y2-y1读取为-27,因为坐标系是基于左上角的0,0


问题是当X和Y都为负值,使θ为正值时,θ应该指向相反的方向(从中心点向外)。我知道我可以在这里玩180度的把戏,但我想知道我做错了什么。

在Javascript和许多语言中,有一个函数可以解决这个问题。它是一个具有两个参数(x和y坐标)的函数,因此系统可以向结果中添加或减去π以产生正确的角度。而不是打电话

Math.atan(y/x)
你只要打电话就行了

Math.atan2(y, x)

我不知道你想如何划清界限,但这两种方法都可以解决你的问题

 theta = Math.atan2(distance.y , distance.x);
 theta = Math.PI + Math.atan2(distance.y , distance.x);

原因当y和x都为负值时,将它们除以会得到一个正数(这是对应角度的标记,当角度切线为正值时,角度本身为正值。有许多值可以传递给trig函数(sin、cos、tan)这将给出相同的值。sin的明显值是0、Pi、2*Pi、3*Pi等。它们只给出特定范围内的唯一值(例如sin-its-Pi/2到+Pi/2)这意味着,当执行反向触发函数以返回到原始值时,知道触发函数的结果是没有用的,除非你也大致知道它在什么范围内。你确定的方法是使用x和y的符号来计算它首先是哪个象限,从而确定是否需要加、减或其他方法来获得正确的结果嗯,好的。当我在谷歌上搜索arctan的javascript时,它告诉我函数是相同的,我选择了atan,因为它没有让读者怀疑atan2是什么……不过这解决了问题。