0


方程式r(theta) = cos(k*theta) + Cのオフセット C でポーラー ローズをプロットしようとすると、問題が発生します。このポーラー ローズをプロットしようとしています:
http://en.wikipedia .org/wiki/Polar_coordinate_system#/media/File:Cartesian_to_polar.gif

極方程式は次のようになります:
r(シータ) = cos(k * シータ)
または
r(シータ) = sin(k * シータ)

私が描きたい北極バラの式は:
r(シータ) = 2 + sin(6 * シータ)

わかりました、パラメトリック方程式は次のようになります:
x = C + sin(k * theta) * cos(theta)
y = C + sin(k * theta) * sin(theta)

キャンバス (描画領域) では、原点が画面の中央にないため、バラをそこに移動する必要があります。わかりました、大したことはありません。もう 1 つのポイントは、バラが見えるように拡大縮小する必要があることです。そうしないと小さすぎますが、それでも問題ありません。これで 100* が説明されます。ここに私のコードがあります、それはC ++にあります:

for ( float t = 0; t < PI_2; t+= 0.01 )
{
    r = Origin.get_x() + 100*(2+(sin(6*t) * cos(t)));
    h = Origin.get_y() + 100*(2+(sin(6*t) * sin(t)));
    point(r,h);
}

私はそれが間違っていることを知っています.C定数でなければならない+2を追加すると、私が望むように機能しないからです. 「余分な翻訳」を防ぎ、適切に描画するにはどうすればよいですか?

4

1 に答える 1

1

x = r cos(theta)y = r sin(theta)あるため、パラメトリック方程式は および である必要がx(theta) = C * cos(theta) + sin(k*theta) * cos(theta)ありy(theta) = C * sin(theta) + sin(k*theta) * sin(theta)ます。Cそれぞれbycos(theta)と byを掛けるのを忘れただけsin(theta)です。

于 2015-04-12T05:08:58.053 に答える