2016-03-21 16 views
0

私のプログラムは極座標グラフウィンドウです。私の問題は、グラフr=a*sin(b*theta)の場合です。私の具体的な例はa=12b=8です。私は次に描かれたポイントを接続すると、私は何かのショー以下の取得:極座標グラフ座標を接続する

Polar Graph

ラインが素敵に見えますが、正しくない花びら、全体に描かれているように見えます。以下の点や線を描画するコードである:

for(int i=0; i< ptr.size(); i++){ 
     drawPoint(g2d, ptr.get(i), ptt.get(i)); 
     if(connectPoints && i!=ptr.size()-1){ 
      g.drawLine((int)(origin_x+Math.cos(ptt.get(i))*ptr.get(i)*ppp), 
        (int)(origin_y-Math.sin(ptt.get(i))*ptr.get(i)*ppp), 
        (int)(origin_x+Math.cos(ptt.get(i+1))*ptr.get(i+1)*ppp), 
        (int)(origin_y-Math.sin(ptt.get(i+1))*ptr.get(i+1)*ppp)); 
     } 
} 

ptrは、r値を含み、pttはシータ値を含みます。ポイントを追加する行は次のとおりです。

for(double i=0; i<100; i+=0.1){ 
     pg.plot(12*Math.cos(8*i), i); 
} 

なぜこのようなことが起こりますか?どのように修正することができますか?あらかじめありがとう!

答えて

1

あなたはサークルを複数回通過しており、サンプルポイントは各パスで同じではありません。そういうわけで、あなたは花びらを横切って線を引っ張っているのです。試してみてください:

double numberOfSteps = 1000; 
double stepSize = 2.0 * Math.PI/numberOfSteps; 
for(double i=0; i<numberOfSteps; i++){ 
    double theta = i * stepsize; 
    pg.plot(12*Math.cos(8.0 * theta), theta); 
} 

実験を微調整してnumberOfStepsとしてください。

+0

この例ではうまくいきました。ポイントのプロットは、極座標グラフウィンドウのテストクラスで行われますが、ステップ数を知らずにポイントのリストしか持たずにこれを修正する方法はありますか? – Dando18

+0

@ Dando18クイックアンサーは_yes_です。それを実装するかどうかは、コードのどの部分を変更できるかによって異なります。私の最初の考えは 'r'と' theta'の両方を保持する 'PolarCoordinate'クラスを作成することでした。おそらく '0 <= theta <2 * Math.PI'を保証するべきです。これらをリストに入れ、 'theta 'でリストをソートします。その後、それらをプロットすることができます。 – bradimus

+0

リストにポイントを追加する前に 'theta%= 2 * Math.PI'を追加して解決しました。 – Dando18

関連する問題