C# 用钢笔画y=sin(θ;)*cos(θ;)

C# 用钢笔画y=sin(θ;)*cos(θ;),c#,.net,winforms,math,drawing,C#,.net,Winforms,Math,Drawing,我想画sin(θ)*cos(θ),但它不起作用。 我可以画罪恶或罪恶, 但是我想一起画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 xo

我想画
sin(θ)*cos(θ)
,但它不起作用。 我可以画罪恶或罪恶, 但是我想一起画
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;
    }
}
private void按钮1\u单击(对象发送者,事件参数e)
{
Graphics drw=this.CreateGraphics();
画笔=新画笔(画笔。黑色,7.0f);
浮点x1=0;
浮动y1=0;
浮点数xoy=200;
浮动ef=20;

对于(double i=0;i实际上,您正在寻找的真正函数有点不同……请看一个示例。查看有关极地花卉的内容,我确信它将指向正确的方向,并且它还包含完整的工作源代码

举个例子,假设您使用表单中的面板绘制极地花:

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)
                    );
            }
        }
    }
}
panel.OnPaint+=panel\u-Paint;
私有空心面板_Paint(对象发送器、PaintEventArgs e)
{
双刻度=((面板)发送器)。宽度/2.0d;
重复两次=数学四舍五入(分数为0);
双基=(2.0d*Math.PI)/标度;
双瓣=2.0d;
使用(图形g=e.Graphics)
{
使用(画笔=新画笔(画笔:红色,2.0f))
{
对于(双i=0.0f;i<(重复-1);+i)
{
双t0=i*基准;
双t1=(i+1)*基准;
Double x0=数学Sin(花瓣*t0)*数学Cos(t0);
Double x1=数学Sin(花瓣*t1)*数学Cos(t1);
Double y0=Math.Sin(花瓣*t0)*Math.Sin(t0);
双y1=数学Sin(花瓣*t1)*数学Sin(t1);
g、 抽绳
(
笔,
(单个)((刻度*x0)+刻度),
(单个)((刻度*y0)+刻度),
(单个)((刻度*x1)+刻度),
(单个)((刻度*y1)+刻度)
);
}
}
}
}
基本公式规定,如果
petals
变量值为:

  • 即使是,它也代表了极地花花瓣数量的一半
  • 奇数,则表示极地花的花瓣数量
因此,如果定义
Double petals=2.0d;
,将获得
4
petals…如果定义
Double petals=5.0d;
,将获得
5
petals


您可能会发现查看相应的更容易

private void Form1\u Paint(对象发送方,PaintEventArgs e)
{
var g=e.图形;
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();
钢笔=新钢笔(刷子。黑色,3);
int标度=100;
int移位=100;
对于(int i=0;i
请也发布您的结果。感谢使用双角度正弦公式:
sin(θ)cos(θ)=1/2sin(2θ)
。只需像以前一样绘制一条正弦曲线,输入参数加倍,然后绘制结果值的一半。如果您试图绘制
y=sin(x)*cos(x),图形计算器可能会错误地将
y
解释为笛卡尔图表中的径向坐标,而不是垂直坐标
它应该给出您想要的结果。
    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);
        }
    }