Respond needs javascript to run. To find out more click here
C# 2 boyutlu cisimleri döndürme programı indir-2D-3D » panel1Width, panel1Height, floatPikselSayisi;, grafikDrawLinekalem, panel1CreateGraphics;, EventArgs » Serdar Demir Uefa Maçları Canlı İzle
RSS
 

C# 2 boyutlu cisimleri döndürme programı indir-2D-3D

04 Kas

Bu proje ile 2 boyutlu cisimleri panelimizin üzerine çizip şekil üzerinde basit işlemler yapacağız döndürme, öteleme ,simetrisini alma, meyillendirme

Bildiğimiz gibi koordinat sisteminde y ekseni aşağıya doğru gittiğimizde azalırdı. Bilgisayarımızda ise y ekseni aşağıya doğru artar. Öncelikle çizgiyi çizeceğimiz algoritmayı belirleyip fonksiyonunu oluşturuyoruz. Ben DDA algoritmasını kullanacağım fonksiyonumuzu oluşturalım;

 void DDAkareciz(int x1, int y1, int x2, int y2)
        {
            int PikselSayisi;
            int dx, dy;
            float x, xFark;
            float y, yFark;
            dx = x2 - x1;
            dy = y2 - y1;
            PikselSayisi = Math.Abs(dx) > Math.Abs(dy) ? Math.Abs(dx) : Math.Abs(dy);
            xFark = (float)dx / (float)PikselSayisi;
            yFark = (float)dy / (float)PikselSayisi;
            x = (float)x1;
            y = (float)y1;
            System.Drawing.Graphics tualgraphics = panel1.CreateGraphics();
            System.Drawing.SolidBrush m_tualbrush = new System.Drawing.SolidBrush(m_brushcolor);
            while (PikselSayisi > 1)
            {
                    tualgraphics.FillEllipse(m_tualbrush, (int)Math.Floor(x + 0.5F), (int)Math.Floor(y + 0.5f), 3, 3);
                x += xFark;
                y += yFark;
                PikselSayisi--;
            }
        }

Projemizde kullanacağımız global değişkenleri tanımlıyoruz;

#region degisken
        int x1 = 20, y1 = 20, x2 = 70, y2 = 20, x3 = 70, y3 = 70, x4 = 20, y4 = 70;
        int xorjin, yorjin;
        int art = 1;
        int artsag=1;
        #endregion

Şimdi panelimize koordinat düzlemi çizelim;

Pen kalem = new Pen(Color.Black);

            Graphics grafik = panel1.CreateGraphics();
            grafik.DrawLine(kalem, 1, panel1.Height / 2, panel1.Width, panel1.Height / 2);
            grafik.DrawLine(kalem, panel1.Width / 2, 1, panel1.Width / 2, panel1.Height);

Ben burada c# ın çizgi çizme fonksiyonunu kullandım hızlı oldugu için bu kodu panelin paint olayına yazıyoruz. Genişlik be yüksekliğin tam ortasından iki çizgi çiziyor Ve paneliize koordinat düzlemi çizilmiş oluyor.
Şimdi kare çizme fonksiyonunu oluşturalım; DDA algoritmamızı dört kez çağıracağız tek tek bütün cizgileri bu şekilde çizeceğiz.
Kareyi çizecek olan butonun cilck olayına aşağıdaki kodu yazıyoruz;

  private void btnReset_Click(object sender, EventArgs e)
        {
        xorjin = panel1.Width / 2;
        yorjin = panel1.Height / 2;
        kareciz(xorjin + x1, yorjin - y1, xorjin + x2, yorjin - y2, xorjin + x3, yorjin - y3, xorjin + x4, yorjin - y4);

        }

Artık panelimize koordinat sistemini ve kareyi çizdik; Ölçeklendirme de aynı mantık koordinatlarla oynayarak istediğiniz boyutta oluşturabilirsiniz ayrıca istediğiniz çokgeni çizebilirsiniz.
Burada en önemlisi döndürme olayı yukarıda tanımladığımız global değişkenler burda işimize yarayacak.
Vectörlerden hatırlarsınız açısı verilen dogrunun uzunlugunu bulmayı burda kullanacağız x1 ve y1 ile( verilen açı değerlerinin) sinalfa ve cosalfa değerleriyle çarparak yeni çizilecek karenin yerini belirliyoruz.

private void tRotDeg_Scroll(object sender, EventArgs e)
        {
            panel1.Refresh();
            textBox1.Text = Dondur.Value.ToString();
            int xx1, yy1, xx2, yy2, xx3, yy3, xx4, yy4;
            double alfacos, alfasin;
            xorjin = panel1.Width / 2;
            yorjin = panel1.Height / 2;
            alfacos = Math.Cos(Convert.ToInt32(Dondur.Value) * 3.1415 / 180);
            alfasin = Math.Sin(Convert.ToInt32(Dondur.Value) * 3.1415 / 180);
            xx1 = xorjin + Convert.ToInt32(x1 * alfacos - y1 * alfasin);
            yy1 = yorjin - Convert.ToInt32(x1 * alfasin + y1 * alfacos);
            xx2 = xorjin + Convert.ToInt32(x2 * alfacos - y2 * alfasin);
            yy2 = yorjin - Convert.ToInt32(x2 * alfasin + y2 * alfacos);
            xx3 = xorjin + Convert.ToInt32(x3 * alfacos - y3 * alfasin);
            yy3 = yorjin - Convert.ToInt32(x3 * alfasin + y3 * alfacos);
            xx4 = xorjin + Convert.ToInt32(x4 * alfacos - y4 * alfasin);
            yy4 = yorjin - Convert.ToInt32(x4 * alfasin + y4 * alfacos);
            kareciz(xx1, yy1, xx2, yy2, xx3, yy3, xx4, yy4);
        }

Ben projede trackbar kullandım siz textbox scroll gibi kontroller de kullanabilirsiniz.

DOWNLOAD

 

Tags: , , , , , , , , , , , , , , , , , , , , , , , , , ,

Leave a Reply

 

 
  1. Ahmet

    12 Kasım 2009 at 13:07

    Kod için teşekkürler. İyi bir örnek oldu. Şifreyi yollayabilirmisin

     
  2. yuhubaa

    12 Kasım 2009 at 13:25

    rar şifresi serdardemir.net ayrıca yorumların için teşekkür ederim benim o makaleyi yazmamdaki amaç döndürme ve çizim algoritmalrını öğrenmek için yazmıştım yani c# kendi içerisinde hazır fonksiyonları barındırıyor sana önerebileceğim kaynak eğer biraz ingilizcen varsa codeproject.com sitesinde makaleler ve program kaynak kodları mevcut eğer döndürme animasyonlar işleriyle uğraşacaksan wpf ile ilgilenmeni tavsiye ederim

     
  3. Mehmet Akif SÖNMEZ

    02 Aralık 2009 at 04:03

    ellerine sağlık

     
  4. sokak007

    07 Aralık 2009 at 15:25

    şifreyi alabilirmiyim

     
  5. #4

    14 Nisan 2010 at 05:48

    şifreyi alabilirmiyimmmmmm

     
  6. murat

    24 Nisan 2010 at 11:48

    sifreyı alabılırmııym

     
  7. birkan

    25 Nisan 2011 at 09:48

    emeğine sağlık. teşekkürler

     
  8. Bilal

    11 Temmuz 2011 at 03:11

    Şifre Lütfen