C# İLE FONKSİYON GRAFİĞİ ÇİZME

C# ile parabolik fonksiyonların grafiklerini çizmek. C# ile y = x^2 fonksiyonunun grafiğini çizmek. C# Windows formu kare bölmeli sayfa düzlemi haline getirmek ve grafik çizmek. 


C# ile fonksiyonların grafiğini çizmek, hem algoritma bilgisi hem de matematik bilgisi gerektiren bir işlemdir. Eğer hazır kalıpları kullanmıyorsanız, hangi programlama dili ile yazarsanız yazın biraz zorlanırsınız.

Önce sayfamızı kare düzlem haline getiriyoruz. Bunun için "LabelWrite()" fonksiyonu kullanılıyor. Koordinat sistemi daha önceki derslerde ayrıntılı açıklandığı için bu derste detaylarına girmeyeceğiz. Merak edenler sayfa sonundaki linklerden” C# ile Koordinat Sistemi” konusuna bakabilir.

CS_Parabol


Eğer bu grafikleri sıfırdan kendiniz oluşturmak isterseniz, önce kağıt üzerine istenen fonksiyonu yazmalısınız. Bu fonksiyonun x ve y koordinatlarını kestiği noktaları belirlemelisiniz. Daha sonra x değişkenine 3 – 4 farklı değer girerek y değerini hesaplamalısınız.


y = x2 fonksiyonu parabolik bir fonksiyondur. x yerine girilen her sayının karesini alır. Sonuç her zaman pozitiftir. Bu fonksiyonun denklemini elde etmek kolaydır. C# ile,

y = Math.Pow(x,2)

Şeklinde bir komut ile x’in karesi alınır. Şimdi biz grafiğini çizeceğimiz için bu x sayısının belli bir aralıkta olması gerekmektedir. Mesela x = 5 olursa y = 25 olur ki bu değerler koordinat düzleminde büyük yer kaplar.

Biz grafiği nokta, nokta çizdirmek istiyoruz. Bu noktaların birleşimi bize istediğimiz grafiği vermelidir. Bu nedenle noktalar arasında muazzam bir uyum olması gerekmektedir. Öncelikle bir değişken belirliyoruz.

float t_an = -1.5

Bu komut -1.5 değeri üzerinden ileri giderek sayılar üretecektir, ama nasıl?

Grafik çiziminde her adımda bu komut 0.005 artırılır. 

t_an += 0.005F;


x değişkeni bu sayıya eşitlenir.

xt = t_an;

y değişkeni bu sayının karesine eşitlenir.

yt = Math.Pow(xt, us);

x2 ve y2 değişenleri bu sayılara eşitlenir. Bu değişkenler her döngüde yenilenen ilerideki noktalardır.

y2 = (float)yt;

x2 = (float)xt;


Grafik çizilmeye başlanır.

  if (x1 != 0)

  {

   lin_object.DrawLine(fnckalem, x1 * x_max + x_left, y_top - (y1 * y_max), x1 * x_max + x_left, y_top - (y2 * y_max));

  }

X2 ve y2 değişkenleri değerlerini x1 ve y1 değişkenlerine aktarır. Piksel, piksel gideceğimizden x1 değeri ilk pikselin, x2 değeri son pikselin koordinatını gösterecektir.

x1 = x2;

y1 = y2;

x1 değeri başlangıçta 0 olacağından çizmeyecektir.

x1 değişkeni 0,005 eklenerek büyüyecektir. Daha sonra belirlediğimiz x_left koordinatına göre belirli bir noktadan başlayarak ileri doğru gidecektir.

1 adımda x1 = -1,495 olacaktır. Bunun karesi

yt = 2.235 olacaktır.

X1’in x eksenindeki noktasını belirlemek için 88 ile çarpıyoruz, 131.56 oluyor. y2 değerini 200 ile çarparak 447 değerini buluyoruz.

2. adımda x1 = 1.490, yt = 2.22, 

x eksenindeki noktası 131.12

y eksenindeki noktası 444.02 olmaktadır.

x koordinatları 0,44 ara ile birleştirilirken, y koordinatları 2,985 ara ile birleştirilmektedir.

Bu birleşme bize istediğimiz eğriyi vermektedir.

Fonksiyonu for döngüsü ile de yapabilirdik ama Timerde daha güzel oluyor. Yavaş yavaş çiziliyor.

Kolay gelsin.

Tüm kodlar.

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

using System.Windows.Forms;

namespace Parabolik_Fonksiyon

{

    public partial class Form1 : Form

    {

        public Form1()

        {

            InitializeComponent();

        }

        private int Wx = 0;

        private string SW = Screen.PrimaryScreen.Bounds.Width.ToString();

        private string SH = Screen.PrimaryScreen.Bounds.Height.ToString();

        private Label[] apsis_x;

        private Label[] apsis_y;

        private Graphics lin_object;

        private Brush brs;

        private Font tekst;

        private Pen yenikalem;

        private Pen fnckalem;

        private Timer zaman;

        private int y_top = 500;

        private int x_left = 500;

        private void Form1_Load(object sender, EventArgs e)

        {

            this.WindowState = FormWindowState.Maximized;

            this.BackColor = Color.SteelBlue;

            this.BackColor = Color.Black;

            this.BackColor = Color.White;

            button1.Top = 600;

            button1.Left = 200;

            button1.Text = "K-SISTEM";

            button2.Top = 600;

            button2.Left = 300;

            button2.Width = 120;

            button2.Text = "y = x^2";

            button3.Top = 600;

            button3.Left = 550;

            button3.Text = "DURDUR";

            zaman = new Timer();

            zaman.Tick += new EventHandler(Fonksiyon1);

        }

        protected override void OnPaint(PaintEventArgs e)

        {

            base.OnPaint(e);

            Wx = Convert.ToInt32(SW);

            lin_object = this.CreateGraphics();

            brs = new SolidBrush(System.Drawing.Color.Gold);

            tekst = new System.Drawing.Font("Times New Roman", 20, FontStyle.Italic);

            lin_object.DrawString("SANATSAL BİLGİ \n FONKSİYON GRAFİKLERİ", tekst, brs, 100, 100);

            yenikalem = new Pen(Color.DarkBlue);

            yenikalem.Width = 4;

            yenikalem.EndCap = System.Drawing.Drawing2D.LineCap.ArrowAnchor;


        }

        private void button1_Click(object sender, EventArgs e)

        {

            lin_object.DrawLine(yenikalem, x_left - 450, y_top, Wx - 20, y_top);

            lin_object.DrawLine(yenikalem, x_left, y_top + 400, x_left, y_top - 500);

            yenikalem.Dispose();

            LabelWrite();

        }

        private void button2_Click(object sender, EventArgs e)

        {

            fnckalem = new Pen(Color.Red, 3);

            zaman.Interval = 1;

            zaman.Start();

        }

        private void button3_Click(object sender, EventArgs e)

        {

            zaman.Stop();

        }

        private void LabelWrite()

        {

            yenikalem = new Pen(Color.Red);

            yenikalem.Width = 2;

            fnckalem = new Pen(Color.DarkTurquoise);

            fnckalem.Width = 1;

            int deg = 1;

            int xson = (Wx - 150) / 40;

            int xson1 = 400 / 40;

            int yson = 800 / 40;

            int yson1 = 500 / 40;

            int top = y_top - 40;

            int left = x_left - 40;

            apsis_x = new Label[xson + 1];

            apsis_y = new Label[yson + 1];

            for (int l = 0; l < xson1; l++)

            {

                lin_object.DrawLine(yenikalem, left, y_top - 5, left, y_top + 5);

                apsis_x[l] = new Label();

                apsis_x[l].Text = "-" + deg.ToString();

                deg += 1;

                apsis_x[l].Left = left - 7;

                apsis_x[l].Top = y_top + 10;

                apsis_x[l].Width = 30;

                apsis_x[l].Height = 20;

                this.Controls.Add(apsis_x[l]);

                lin_object.DrawLine(fnckalem, left, y_top + 400, left, y_top - 500);

                left -= 40;

            }

            deg = 0;

            left = x_left;

            for (int n = xson1; n < xson; n++)

            {

                lin_object.DrawLine(yenikalem, left, y_top - 5, left, y_top + 5);

                apsis_x[n] = new Label();

                apsis_x[n].Text = deg.ToString();

                deg += 1;

                apsis_x[n].Left = left - 7;

                apsis_x[n].Top = y_top + 10;

                apsis_x[n].Width = 30;

                apsis_x[n].Height = 20;

                this.Controls.Add(apsis_x[n]);

                lin_object.DrawLine(fnckalem, left, y_top + 400, left, y_top - 500);

                left += 40;

            }

            apsis_x[xson1].Left = apsis_x[xson1].Left + 10;

            apsis_x[xson] = new Label();

            apsis_x[xson].Text = "x";

            apsis_x[xson].Width = 150;

            apsis_x[xson].Left = Wx - 50;

            apsis_x[xson].Top = y_top + 10;

            this.Controls.Add(apsis_x[xson]);

            deg = 1;

            for (int z = 0; z < yson1; z++)

            {

                lin_object.DrawLine(yenikalem, x_left - 5, top, x_left + 5, top);

                apsis_y[z] = new Label();

                apsis_y[z].Text = deg.ToString();

                deg += 1;

                apsis_y[z].Left = x_left - 35;

                apsis_y[z].Top = top - 7;

                apsis_y[z].Width = 30;

                apsis_y[z].Height = 20;

                this.Controls.Add(apsis_y[z]);

                lin_object.DrawLine(fnckalem, x_left - 400, top, left - 40, top);

                top -= 40;

            }

            top = y_top + 50;

            deg = 1;

            for (int t = yson1; t < yson; t++)

            {

                lin_object.DrawLine(yenikalem, x_left - 5, top, x_left + 5, top);

                apsis_y[t] = new Label();

                apsis_y[t].Text = "-" + deg.ToString();

                deg += 1;

                apsis_y[t].Left = x_left - 35;

                apsis_y[t].Top = top - 7;

                apsis_y[t].Width = 30;

                apsis_y[t].Height = 20;

                this.Controls.Add(apsis_y[t]);

                lin_object.DrawLine(fnckalem, x_left - 400, top, left - 40, top);

                top += 40;

            }

            apsis_y[yson] = new Label();

            apsis_y[yson].Text = "y";

            apsis_y[yson].Width = 50;

            apsis_y[yson].Left = x_left + 10;

            apsis_y[yson].Top = y_top - 500;

            this.Controls.Add(apsis_y[yson]);

        }

        private double t_an = -1.5;

        float x_max = 88;

        float y_max = 200;

        private double yt = 0;

        private double us = 2;

        private double xt = 0;

        float x1 = 0;

        float y1 = 0;

        float x2 = 1;

        float y2 = 1;

        private void Fonksiyon1(object sender, EventArgs e)

        {

            t_an += 0.005F;

            xt = t_an;

            yt = Math.Pow(xt, us);

            y2 = (float)yt;

            x2 = (float)xt;

            if (x1 != 0)

            {

                lin_object.DrawLine(fnckalem, x1 * x_max + x_left, y_top - (y1 * y_max), x1 * x_max + x_left, y_top - (y2 * y_max));

            }

            x1 = x2;

            y1 = y2;

            if (t_an > 1.5)

            {

                zaman.Stop();

            }

        }

    }

}


C# İle Sinusoidal Dalga Çizmek


C# İle Koordinat Sistemi Çizimi


SANATSAL BİLGİ

04/04/2019

  • YORUM YAZ
  • ADI SOYADI(veya nick)
  • YORUM

  • BİLGİSAYAR - ELEKTRİK
  • YGS - LYS KONULARI
  • 8. SINIF
  • 7. SINIF
  • 6. SINIF
  • GENEL MATEMATİK
  • BİRİM ÇEVİRİCİLER
COPYRIGHT© HER HAKKI SAKLIDIR
Sitede Yer Alan Bilgi Belge Ve Materyallerin İzinsiz olarak Kopyalanması ve Alıntılanması Yasaktır

SANATSAL BILGI