0

この質問をどこで行うか(数学とここの間)がよくわかりませんでした

この式を使って対数螺旋を描いてみます

ここに画像の説明を入力してください

それは機能します(画面にスパイラルが表示されます)が、ピッチを変更すると(a)スパイラルはピッチを変更せず、回転とサイズのみが変更されます(aを1に設定すると円が作成されますが、そうではありません)

私はそれらを試しました:

double step = (end - start) / sample;
        for (int i = 1;i <= sample;i++) {
            double t = start+i*step;
            coordinates[i-1][0] =  a * Math.pow(Math.E,b*t) * Math.cos(t);
            coordinates[i-1][1] = a * Math.pow(Math.E,b*t) * Math.sin(t);
}

(aとbは定数、開始= -4 * PI、終了= 4 * PI)

    double step = (end - start) / sample;
        for (int i = 1;i <= sample;i++) {
            double r = start+i*step;
        double t = (1/b)*Math.log(r/a);
            coordinates[i-1][0] = r* Math.cos(t);
            coordinates[i-1][1] = r* Math.sin(t);
}

(aとbは定数、開始= 0、終了= 10)

数式に大きな誤りがあったと思いますが、どちらがわかりません。役立つ場合は出力画像を提供できますが、方法がわかりません

編集:r = a exp(θcotb)を使用して動作させることに成功しました

    double r = Math.pow(a,t*(1/Math.tan(b)));

しかし、他の数式がうまくいかなかった理由がまだわかりません。そのため、この質問に答えるのではなく編集しました。

4

1 に答える 1

0

私の推測では、丸めの問題が発生していると思います。'a'と'b'の両方がdoubleであると想定しています...コードに記述されていないため、質問する必要がありますが、これが当てはまると想定しています。そうでなければ、それが問題になります:)

次に、i * stepを見て、これが期待どおりであることを確認します...これは問題ないと思いますが、int'i'をdoubleにキャストしていないので、パーツを再シャッフルする場合は問題が発生します。

ああ、実際に見たいのは「サンプル」です。これがintである場合、これはステップに対して間違った結果をもたらします。これは、intで除算しているため、intの戻り値が得られると期待しています...実際、私の1pの賭けは、 int。

それでも問題が解決しない場合は、ステップ値を印刷して、期待どおりであることを確認できます。また、このサンプルの問題でない場合は、「t」が正しく計算されていることを確認してください。

于 2013-01-21T17:17:28.190 に答える