2011-01-25 1240 views
7

我有一个正方形,最近的点离中心1单位。看到我下面的ascii图:用极坐标绘制正方形

+-----------+ 
|   | 
| x  | 
|-----+  | 
|   | 
|   | 
+-----------+ 

因此,从原点到角落的距离是sqrt(2)。我需要一个函数来返回从原点到广场上任意角度点的距离。例如,对于输入0,该函数将返回1.对于45的输入,该函数将返回角度的距离,即2的平方根。然后对于90,它将再次返回1。

换句话说,当你用极坐标图绘制函数时,它将绘制一个正方形。

我相信,该函数将是这样的:

f(x) = sqrt(tan(x)^2+1) 

唯一的问题是,上面的功能将不绘制的正方形的边。我需要吸取所有4个方面的东西。

我知道有一个类似于这个的三角函数,但我将在JavaScript中使用这个函数,所以我只能使用标准的三角函数。

任何帮助将不胜感激。提前致谢。

+0

你真的只需要知道答案为1/8的平方... – Pointy 2011-01-25 00:50:38

+0

是的,但问题是让每一个以对应于1/8角度的正确部分。 – Joel 2011-01-25 00:53:33

+0

嘿@Joel - 回来,选择MonoMano的答案,因为它的确是对的:-) – Pointy 2011-01-25 01:20:24

回答

9

这将是更快的我猜:

function getLengthForDeg(phi){ 
    phi = ((phi+45)%90-45)/180*Math.PI; 
    return 1/Math.cos(phi); 
} 
1

我想出了一个公式,可以与因为在他们的极性图形功能的窗口部分的THETA阶跃函数的TI计算器工作。我不知道它是否对你有帮助。我想只有你能够配置theta(或degree)步骤,它才能工作。

r = (((s*sqrt(2)) - 5)/4) sin(4(x - (pi/8)) + (((s*sqrt(2)) + s)/4) 

其中s是所期望的正方形

设置的θ步骤pi/4的以绘制创建一个正方形

的图像所需要的主要点的边的长度再次,这适用于TI计算器。

1

原文是标记为Javascript,但我需要这种类型的语言(例如C),你不能模数浮点数。

MonoMano的答案是正确的,但对于其他人来这里需要同样的事情,这里的MonoMano的回答修改C/ObjC/Java的的/ etc:

/** c.f. http://stackoverflow.com/a/4788992/153422 
* M_PI_2 is a constant: "PI/2" 
* M_PI_4 is a constant: "PI/4" 
*/ 
double getSquarePolarRadiusForRad(double phi){ 
    double phiInPiBy4Range = phi; 
    while(phiInPiBy4Range > M_PI_4) 
     phiInPiBy4Range -= M_PI_2; 
    while(phiInPiBy4Range < - M_PI_4) 
     phiInPiBy4Range += M_PI_2; 

    return 1/cos(phiInPiBy4Range); 
} 
1

我不熟悉不够使用Javascript,但在Wolfram Alpha的使用的格式,对于从角半径的公式是:

分钟(1/ABS(COS(THETA)),1/ABS(SIN(THETA))))