Respond needs javascript to run. To find out more click here
küp » Serdar Demir
RSS
 

Posts Tagged ‘küp’

C# da 3D Küp Çizimi Döndürme Örnek Uygulaması

01 Oca

Bilgisayar grafikleri dersi ödevi olarak yapmış olduğumuz bir uygulama modelleme programlarındaki gibi cismin üstten alttan sağdan ve persfektif görünüşü elimizden geldiğince yapmaya çalıştım.

Sadece bir doğruyu belli bir açıda döndürdüğümüz zaman yeni noktaların x ve y noktalarını bulan formulu kullanarak yapılmış bir program. Diğer görünümleri elde etmek için sadece normal görünüşün 90 derece döndürerek diğer görünüşleri elde edebiliyoruz

Programın kaynak kodlarını da ekledim inceleyebilirsiniz.

İnDir

 

WPF de 3 Boyutlu Küp Çizimi

25 Ara

WPF ile ilgili ilk projem bu. Açıkça söylemeliyim ki ödev olmasaydı herhalde hiç başlayamazdım. Bazen ödevler bir işe yarayabiliyorlar. Öncelikle söyliyeyim, WPF bildiğimiz Windows Form’ larını oluşturmaya benzemiyor. Yani başlamak isteyenler köklü değişikliklere hazırlıklı olmalılar. Eğer yeniliğe(ya da öğrenmeye) açık biriyseniz bence deneyin derim. Normalde Windows Form’ ları ile yapamadığım birçok şeyi WPF sayesinde gerçekleştirebiliyorum.

WPF nin en bütük farkı; GDI+ yerine DirectX kullanması diyebiliriz. Bu da WPF programlarını grafik öğeleri içeren uygulamalarda öne çıkarıyor. Bizim ödev de Grafik ile alakalı bir ders olduğu için bende WPF kullanayım dedim. (Ayrıca; diğeriyle de uğraşacak vaktim yoktu).

Bu uygulama ekrana bir 3 boyutlu küp çizdirip o küpü X,Y,Z eksenleri etrafında döndürme, öteleme, simetrisini alma, boyutlandırma gibi işlemleri yaptırıyor. Küp 4 farklı açıdan görünüyor(3Ds Max gibi). Lafı fazla uzatmayayım. Bitirdiğim projemi size sunayım. RAR şifresi yoktur.

http://rapidshare.com/files/325855561/3b_kup_wpf.rar

 
1 Comment

Posted in C#, Projelerim

 

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