7

最も近い点が中心から1単位離れた正方形があります。以下の私のASCII図を見てください:

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

したがって、原点から角までの距離は sqrt(2) です。任意の角度で原点から正方形上の点までの距離を返す関数が必要です。たとえば、入力が 0 の場合、関数は 1 を返します。入力が 45 の場合、関数はコーナーまでの距離 (2 の平方根) を返します。90 の場合、再び 1 を返します。

つまり、極座標グラフで関数をグラフ化すると、正方形が描画されます。

関数は次のようになると思います。

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

唯一の問題は、上記の関数が正方形の辺をグラフ化しないことです。4面すべてを描くものが必要です。

これに似た三角関数があることは知っていますが、この関数を JavaScript で使用するので、標準の三角関数しか使用できません。

どんな助けでも大歓迎です。前もって感謝します。

4

4 に答える 4

10

これは私が推測するより速いでしょう:

function getLengthForDeg(phi){
    phi = ((phi+45)%90-45)/180*Math.PI;
    return 1/Math.cos(phi);
}
于 2011-01-25T01:04:23.590 に答える
2

元の投稿には Javascript のタグが付けられていますが、フロートをモジュラスできない型付き言語 (C など) にはこれが必要でした。

MonoMano の答えは正しいですが、ここに来て同じことが必要な人のために、C / ObjC / Java / etc 用に変更された MonoMano の答えを次に示します。

/** 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);
}
于 2012-11-05T13:24:57.090 に答える
1

ポーラー グラフ関数のウィンドウ セクションにシータ ステップ関数があるため、TI 電卓で使用できる方程式を思いつきました。それがあなたを助けるかどうかはわかりません。シータ(または度)ステップを構成できる場合にのみ機能すると思います。

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

ここで、s は目的の正方形の一辺の長さです。

正方形の画像を作成するために必要な主な点をプロットするために、シータ ステップを pi/4 に設定します。

繰り返しますが、これは TI 電卓で機能します。

于 2012-05-10T03:17:49.377 に答える