C# İLE KARE DALGA ÇİZİMİ

C# programlama dilini kullanarak çizgi çizmek. C# ile Windows form üzerine kare dalga çizimi. C# çizim sınıfları ile yazı yazmak. Konu anlatımı ve örnek program.


C# programlama dili çok güçlü bir dildir. Bunun sebebi gelişmiş bir class yapısına sahiptir ve her şey çok kolay bir biçimde yapılabilmektedir.

Çizim araçlarında da bu böyledir. Biraz matematik bilgisi kullanarak istediğimiz şekilleri kolayca çizebiliriz. Aşağıda bunu siz de göreceksiniz.

 Bu derste yapacağımız kare dalgayı bir sonraki koordinat sistemi yapımı ve daha sonra sinusoidal dalga izleyecek. 

Bu uygulamada form açıldığında otomatik çizgi çizen örnek, buttona basıldığında forma çizim araçlarıyla metin yazan ve çizgi çizen örnek ile buttona tıklandığında kare dalga çizen örnek tek uygulamada ayrı fonksiyonlar halinde yer almaktadır. Program kodları en sonda yer almaktadır.


C# İle Form Açıldığında Otomatik Çizgi Çizmek

C# ile çizgi çizmek kolaydır. Form açıldığında otomatik olarak bir çizgi çizilsin istiyorsanız aşağıdaki kodları eklemeniz yeterlidir.

        protected override void OnPaint(PaintEventArgs e)

        {

//Ekranın genişliği

            Wx = Convert.ToInt32(SW);

            base.OnPaint(e);

//Bir grafik sınıfı yarat

            Graphics grp;

//Grafik sınıfını tanımla

            grp = e.Graphics;

//Kalem yarat

            Pen pp = new Pen(Color.Red);

//Kalem kalınlığı

            pp.Width = 8;

//Çizime başla

            grp.DrawLine(pp, 0, 20, Wx, 20);

            grp.Dispose();

        }


Şimdi burada çizimi yapan satırı inceleyelim.

    grp.DrawLine(pp, 0, 20, Wx, 20);

Bu komutun ilk parametresi çizimin yapılacağı kalemi gösteriyor. Bu kalemi biz ayarlamıştık.

İkinci komutu olan "0" rakamı x ekseninde başlayacağı noktayı belirtiyor. Yani ekranın en solunda başlasın komutu verilmiş.

3. parametre olan "20" rakamı y eksenindeki başlangıç noktasını veriyor. Yani ekranın üst noktasından 20px aşağıda çizilsin demişiz.

4. parametre "Wx" ekranın genişliği boyunca çizilsin komutu vermiş. Yani ilk parametre ile ekranın solunda 0’dan başlasın demiştik. Bu parametre çizginin x ekseninde kaç piksel gideceğini belirliyor. 5. Ve son parametre y ekseninde çizginin bitiş noktasını belirtiyor.

Aşağıdaki gibi,

grp.DrawLine(kalem, x_başlangıç, y_başlangıç, x_bitiş, y_bitiş);


Ekranın sol tarafında 30 piksel içeride ve üstten 100 piksel aşağıda başlayacak ve soldan sağa 60 piksel uzunluğunda olacak çizgiyi aşağıdaki çizeriz.

grp.DrawLine(pp, 30, 100, 90, 100);

 y eksenindeki değer değişmediğine göre düz bir çizgi çizecek demektir.

Kare_dalga


Kare Dalga Çizimi

Çizeceğimiz kare dalga ekranın en solunda başlayacak ve en sağ tarafına kadar gidecek. Kare dalganın genliği 75 birim olacak. 

Program, öncelikle ekran genişliğini alacak. Ekran çözünürlüğü kod bloklarının başında global değişkenlere atanmıştır.

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

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


Kare dalga üreten fonksiyonda genişlik değerini bir int değişkenine atamak yeterlidir.


int RW = Convert.ToInt32(SW);

Her döngüde x ekseni 100 birim ilerleyeceğinden ekran genişliğini 100’e bölüyoruz.

int r = RW / 100;

Ayrıca döngüde ekran çözünürlük farklarını ve çizgi kalınlıklarını göz önünde bulundurarak r değerini 1 fazla yaptık.


Kalem önce x ekseninde 50px bir çizgi çizecek.

Lines.DrawLine(kalem, new Point(hx, hy-2), new Point(hx + 50, hy-2));


Sonra x eksenini geldiği noktada sabit tutup yukarı doğru bir çizgi çizecek.

Lines.DrawLine(kalem2, new Point(hx + 50, hy), new Point(hx + 50, hy - 75));


Çizginin x eksenindeki bölümü artık 50px ileride olacağından hx, 50 artırılmalı.

hx += 50;

Şimdi dikey çizginin ucuna x ekseni doğrultusunda bir çizgi çiziyoruz. Yani üst yatay çizgiyi çiziyoruz.


Lines.DrawLine(kalem, new Point(hx, hy - 73), new Point(hx + 50, hy - 73));

Üst yatay çizgi de tamam şimdi aşağı iniyoruz (y ekseni doğrultusundaki çizgiyi çiziyoruz).

Lines.DrawLine(kalem2, new Point(hx + 50, hy), new Point(hx + 50, hy - 75));


Döngü başına gitmeden önce x eksenini 50 birim daha kaydırmalıyız. Her döngüde x ekseni 100 birim ileri giderken y eksenin sadece 75 px iniş çıkışlar yapmaktadır. Bu nedenle y ekseni için artırım yapılmaz.


Program 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 DrawLine
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        private int hx = 0;
        private int hy = 200;
        private int Wx = 0;
        private string SW = Screen.PrimaryScreen.Bounds.Width.ToString();
        private string SH = Screen.PrimaryScreen.Bounds.Height.ToString();
        private void Form1_Load_1(object sender, EventArgs e)
        {
            this.WindowState = FormWindowState.Maximized;
            button1.Top = 400;
            button2.Top = 400;
     button1.Text = "YAZI";
            button2.Text = "KARE DALGA";
        }
        protected override void OnPaint(PaintEventArgs e)
        {
            Wx = Convert.ToInt32(SW);
            base.OnPaint(e);
            Graphics grp;
            grp = e.Graphics;
            Pen pp = new Pen(Color.Red);
            pp.Width = 8;
            grp.DrawLine(pp, 0, 20, Wx, 20);
            grp.Dispose();
        }
        private void button1_Click(object sender, EventArgs e)
        {
            Graphics lin_object = this.CreateGraphics();
            Brush brs = new SolidBrush(System.Drawing.Color.Red);
            Font tekst = new System.Drawing.Font("Times New Roman", 20, FontStyle.Italic);
            //Ne yazılacak, hangi font nesnesi ile yazılacak, hangi fırça ile yazılacak, x koordinatı, y koordinatı
            lin_object.DrawString("SANATSAL BİLGİ", tekst, brs, 10, 50);
            //Bir kalem yarat, sadece rengi olsun
            Pen yenikalem = new Pen(Color.Coral);
            //Kalemin kalınlığını belirle
            yenikalem.Width = 10;
            //Aynı grafik nesnesi ile bir çizgi çiz
            //Kalem nesnesi, x başlangıç, y başlangıç, x bitiş, y bitiş
            lin_object.DrawLine(yenikalem, 0, 100, Wx, 100);
            yenikalem.Dispose();
        }
        private void button2_Click(object sender, EventArgs e)
        {
            ArtisticLine();
        }
        private void ArtisticLine()
        {
            //Bir grafik nesnesi yarat
            Graphics Lines = this.CreateGraphics();
            //Bir kalem yarat, rengini ve kalınlığını belirle
            Pen kalem = new Pen(Color.DarkRed, 4);
            Pen kalem2 = new Pen(Color.ForestGreen, 4);
            //Ekran çözünürlüğünü int değişkenine ata
            int RW = Convert.ToInt32(SW);
            //Her döngü x değerini 100 pixel ilerletiyor, 100'e böl
            int r = RW / 100;
            //döngüye başla, çizgi kalınlıklarını ve çözünürlüğü düşünerek r değerini 1 fazla al
            for (int l = 0; l < r+1; l++)
            {
                //50px bir x çizgisi çiz
                Lines.DrawLine(kalem, new Point(hx, hy-2), new Point(hx + 50, hy-2));
                //x çizgisi tamam şimdi 75px bir dikey y çizgisi çiz
                Lines.DrawLine(kalem2, new Point(hx + 50, hy), new Point(hx + 50, hy - 75));
                //hx değerine 50px ilave et
                hx += 50;
                //Şimdi y çizgisinin üst ucuna x çizgisini çiz
                Lines.DrawLine(kalem, new Point(hx, hy - 73), new Point(hx + 50, hy - 73));
                //x çizgisi tamam, şimdi aşağıya doğru y çizgisini çiz
                Lines.DrawLine(kalem2, new Point(hx + 50, hy), new Point(hx + 50, hy - 75));
                //bir tue tamamlandı, hx i 50px ileri götür
                hx += 50;
            }
            //grafik aracını yok et
            Lines.Dispose();
        }
     
    }
}


Aşağıdaki örnekte C# ile koordinat sistemi çiziliyor ve bu sisteme kare dalga yerleştiriliyor.


C# İle Koordinat Sistemi Çizimi


SANATSAL BİLGİ

24/02/2019

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

COPYRIGHT© HER HAKKI SAKLIDIR
Sitede Yer Alan Bilgi Belge Ve Materyallerin İzinsiz olarak Kopyalanması ve Alıntılanması Yasaktır

SANATSAL BILGI