2017-12-25 36 views
-4

sin(θ)*cos(θ)を描きたいが、うまくいきません。 sinまたはcos, と書くことができますが、sin(θ)*cos(θ)を一緒に描きたいと思います。ここでペンでC#でy = sin(θ)* cos(θ)を描く

は私のコード

private void button1_Click(object sender, EventArgs e) 
{ 
    Graphics drw = this.CreateGraphics(); 
    Pen pen = new Pen(Brushes.Black, 7.0f); 
    float x1 = 0; 
    float y1 = 0; 
    float xoy = 200; 
    float ef = 20; 

    for (double i=0;i<40;i+=1) 
    { 
     double radi = (float)(i * 180/Math.PI); 
     float temp = (float)Math.Cos(radi)*(float)Math.Sin(radi); 
     drw.DrawLine(pen, x1 * ef, y1 * ef + xoy, ef * (float)i, temp * ef + xoy); 
     x1 = (float)i; 
     y1 = temp; 
    } 
} 

であり、私はこの結果をしたい: enter image description here

+0

てください、あまりにもあなたの結果を投稿してください。ありがとう – alepuzio

+0

二重角サイン公式を使用する: 'sin(θ)cos(θ)= 1/2 sin(2θ)'。前回と同じようにサインカーブを描きます。入力パラメータをdouble *とし、結果をplot * half *とします。あなたのグラフ作成電卓はおそらく、デカルトチャートの垂直座標ではなく、「radial」座標として「y」を誤って解釈しました。 'y = sin(x)* cos(x)'をプロットしようとすると、あなたの*意図した結果が得られるはずです。 – meowgoesthedog

答えて

0

これはあなたのコードのために出力されます:

enter image description here

そして、これがWolfram alpha's resultです:

enter image description here

Desmos's result参照:

enter image description here

したがって、あなたがy=sin (theta)*cos (theta)のために右の出力を持っています。また、rは範囲で-1<=r<=1

+0

彼はこれを望んでいます:[https://www.wolframalpha.com/input/?i=polar+plot+r%3Dsin(theta)*cos(theta)](https://www.wolframalpha.com/input/ ?i = polar + plot + r%3Dsin(theta)* cos(theta))、すなわちパラメトリックプロット。注:パラメータは 'x'ではなく、角度' theta 'です。 –

1

でなければなりません0<=theta<=2*PIと同じで、実際には、あなたが探している本当の機能が少し異なっていること

お知らせ...例hereを参照してください。極北の花については、this articleを見ると、正しい方向を指すと確信しています。また、完全なソースコードも含まれています。

panel.OnPaint += Panel_Paint; 

private void Panel_Paint(Object sender, PaintEventArgs e) 
{ 
    Double scale = ((Panel)sender).Width/2.0d; 
    Double repetitions = Math.Round(scale, 0); 
    Double basis = (2.0d * Math.PI)/scale; 
    Double petals = 2.0d; 

    using (Graphics g = e.Graphics) 
    { 
     using (Pen pen = new Pen(Brushes.Red, 2.0f)) 
     { 
      for (Double i = 0.0f; i < (repetitions - 1); ++i) 
      { 
       Double t0 = i*basis; 
       Double t1 = (i + 1)*basis; 

       Double x0 = Math.Sin(petals * t0) * Math.Cos(t0); 
       Double x1 = Math.Sin(petals * t1) * Math.Cos(t1); 

       Double y0 = Math.Sin(petals * t0) * Math.Sin(t0); 
       Double y1 = Math.Sin(petals * t1) * Math.Sin(t1); 

       g.DrawLine 
        (
         pen, 
         (Single) ((scale*x0) + scale), 
         (Single) ((scale*y0) + scale), 
         (Single) ((scale*x1) + scale), 
         (Single) ((scale*y1) + scale) 
        ); 
      } 
     } 
    } 
} 

基本配合状態petals変数の値である場合いること:

  • あなたは極性花を描画するのフォームでパネルを使用想定

    ちょうど例、たとえであっても、極花の花弁量の半分を表します。

  • 奇数を表す場合、それはamouあなたがDouble petals = 2.0d;を定義する場合極性花

の花びらのNTはそう、あなたは... 4花びらを取得し、あなたがDouble petals = 5.0d;を定義した場合、あなたは5花びらを取得します。

Output

1

あなたはそれが簡単に対応するParametric Equationsを見て見つけることがあります。

enter image description here

private void Form1_Paint(object sender, PaintEventArgs e) 
    { 
     var g = e.Graphics; 

     double pi = Math.PI; 
     int n = 100; 
     var t = Enumerable.Range(0, n).Select(p => p * 2 * pi/n).ToArray(); 
     var x = t.Select(p => Math.Sin(2 * p) * Math.Cos(p)).ToArray(); 
     var y = t.Select(p => Math.Sin(2 * p) * Math.Sin(p)).ToArray(); 

     Pen pen = new Pen(Brushes.Black, 3); 

     int scale = 100; 
     int shift = 100; 
     for (int i = 0; i < n - 1; i++) 
     { 
      g.DrawLine(pen, scale*(float)x[i] + shift, 
       scale*(float)y[i] + shift, 
       scale*(float)x[i + 1] + shift, 
       scale*(float)y[i + 1] + shift); 
     } 
    } 
関連する問題