Ana Menü
· Ana Sayfa
· Dosyalar
· Dökümanlar
· Forum
· Günün Resmi
· Haber Arşivi
· WWW Linkleri
· Üye Listesi

     Forumlar

 strncpy ve strncpy_s
 Konu adi : Borland c++ Builder ile Amiral Batti
 Rady10 - YerliOyun
 Kabusta Kaybolmak
 Konsol da programı bekletmek
 Oyun programlama icin hangi programlama dilli ?
 flash! şanlıurfa bilgisayar oyununda(no rapid)
 Sevgilim Olur musun?
 Directx'e başlamak isteyenler bi bakın
 PSP programlama
 Flash tan php
 Bilgisyr oyunu yapmam için üniverstde hangi bölüme girmeliym
 www.arshiv.gen.ms
 Cimg.h ilgilenenler icin
 müttefik oyunu

Konu Disi
 Emraah
 Yeni sitemiz açıldı
 Kalp krizi durumunda ne yapılmalı?
 Oyun sektöründe hangi görevde çalışmak isterdiniz?
 Takım arkadaşı sorunu
 msn de renklı nıck
 pc hata veriyor ! YARDIM!!
 Gülmek isteyenler Buraya
 İnanılmaz hl 2 modu görüntüsü
 Computer Languages History

[ Forumlara Git ]


oyunyapimi.org: Forums

www.oyunyapimi.org :: Başlığı Görüntüle - Cizim algoritmalari
 SSSSSS   AramaArama   Kullanıcı GruplarıKullanıcı Grupları   ProfilProfil   LoginLogin 

Cizim algoritmalari

 
Yeni Başlık Gönder   Cevap Gönder    www.oyunyapimi.org Forum Ana Sayfası -> Grafik, Modelleme ve Tasarım
Önceki başlık :: Sonraki başlık  
Yazar Mesaj
aseka



Kayıt: Jun 04, 2005
Mesajlar: 7

MesajTarih: Sat Oct 22, 2005 2:33 pm    Mesaj konusu: Cizim algoritmalari Alıntıyla Cevap Ver

Selam arkadaslar,
cizim komutlarinin (line, circle, arc, ellips , v.s.) kullandigi algoritma ile ilgili bir kaynak ariyorum.
Yani aradigim su; (10,10) koordinatindan (150,130) koordinatına doğru bir çizgi çizdik diyelim, bu iki koordinat arasinda hangi pikseller boyanir, veya (300,300) merkezli yaricapi 50 piksel olan bir daire cizdik diyelim, bu durumda hangi pikseller boyanir.
Bu cizim komutlarinin kullandigi matematiksel bagintili algoritmalar hakkinda bilgi verecek arkadaslar varsa cevaplarini bekliyorum. simdiden tesekkur ederim... iyi calismalar..
Başa dön
Kullanıcı profilini gör
vmeydaneri



Kayıt: Dec 08, 2004
Mesajlar: 583
Nereden: Ankara

MesajTarih: Sat Oct 22, 2005 2:48 pm    Mesaj konusu: Alıntıyla Cevap Ver

Cizim araligi sana kalmis bisi yani soyle diyebiliriz istenilen coklukta noktalar dizisi olusturcaksin.

yani soyleki aralik belirlikceksin ve bir noktadan diger noktaya sanki hareket vektoru varmis gibi noktalari tek tek yerlestireceksin.

//-------------------------------------------------
1.nokta
* * 2. nokta
//-------------------------------------------------
aralik belirle ve her aralikta bir nokta yerlestir ve hareket vektoru diger noktayi gostercek sekilde devam et.

*------> *
//-------------------------------------------------
Son olarak tum noktalari ciz cok sık aralik olursa bu bir LINE olur

*------------------------------*
//-------------------------------------------------

Gelelim cember v.s. cizimine bildigimiz (birim cember) sin , cos fonksiyonlarini kulanarak gene belirledigin bir aralikta nokta yerlestirerek bu isi yapabilirsin aralik ne kadar sık olursa gorunum olarak daha iyi olucaktir.
Başa dön
Kullanıcı profilini gör E-Posta'yı gönder Kullanıcının web sitesini ziyaret et MSN Messenger
iware



Kayıt: Jun 12, 2005
Mesajlar: 20
Nereden: eskişehir

MesajTarih: Sat Oct 22, 2005 6:35 pm    Mesaj konusu: Burda HERŞEY MATEMATİK Alıntıyla Cevap Ver

radius = 30
ox = 300
oy =300

For t# = 0 to 360 step 0.5
For u# = 0 to radius step 0.5
ax# = ox + cos(t#) * u#
ay# = oy - sin(t#) * u#
pset (ax#,ay#)
next u#
next t#

umarim basic dilindeki, bu daire algo su sana yardımcı olur. Ha bi de ,


radius = 30
ox = 300
oy =300
u#=radius
For t# = 0 to 360 step 0.5
ax# = ox + cos(t#) * u#
ay# = oy - sin(t#) * u#
pset (ax#,ay#)
next t#

buda cember Smile
Başa dön
Kullanıcı profilini gör MSN Messenger
paradox



Kayıt: May 27, 2005
Mesajlar: 120
Nereden: bursa

MesajTarih: Sun Oct 23, 2005 12:41 am    Mesaj konusu: Alıntıyla Cevap Ver

repeat
v=v+1
for r=1 to 30
dot (cos(v)*r)+100,(sin(v)*r)+200,rgb(v,v,v)
dot (2*sin(v)*30)+200,(cos(v)*30)+200,rgb(255,255,255)
dot (cos(v)*r)+300,(sin(v)*r)+200,rgb(255,255,255)
dot (sin(v)*30)+400,(cos(v)*30)+200,rgb(255,255,255)
dot v,300,rgb(255,255,255)
next r
sync
until escapekey()
buda uygulaması
Başa dön
Kullanıcı profilini gör E-Posta'yı gönder
paradox



Kayıt: May 27, 2005
Mesajlar: 120
Nereden: bursa

MesajTarih: Sun Oct 23, 2005 1:37 am    Mesaj konusu: Alıntıyla Cevap Ver

üssteki link hatalı oldu

buradan indirip görebilirsin
Başa dön
Kullanıcı profilini gör E-Posta'yı gönder
stroma



Kayıt: Mar 31, 2003
Mesajlar: 169

MesajTarih: Sun Oct 23, 2005 9:45 am    Mesaj konusu: Alıntıyla Cevap Ver

Alıntı:
Kod:

void dogruDDA(int x1, int y1, int x2, int y2)
{
  int pixelSayisi;

  int dx, dy;
  float x, xFark;
  float y, yFark;

  /* dx ve dy değişkenlerinde, bitim noktalarının x ve y
     koordinatları arasındaki fark saklanır. */
  dx = x2 - x1;
  dy = y2 - y1;

  /* Ekranda görüntülenecek piksel sayısı hesaplanır. */
  pixelSayisi = abs(dx) > abs(dy) ? abs(dx) : abs(dy);

  xFark = (float)dx / (float)pixelSayisi;
  yFark = (float)dy / (float)pixelSayisi;

  x = (float)x1;
  y = (float)y1;

  /* Pikselleri görüntüleyecek döngü kurulup
     döngünün her işleyişinde x ve y değişkenleri
     xFark ve yFark kadar artırılır. */
  while (pikselSayisi--)
  {
    pikselBas((int)floor(x + 0.5f), (int)floor(y + 0.5f));
    x += xFark;
    y += yFark;
  }
}
////////////////////////////////////
////////////////////////////////////
////////////////////////////////////
void dogruBresenham(int x1, int y1, int x2, int y2)
{
  int hata = x1 - x2;
  int dxCarpi2 = (x2 - x1) * 2;
  int dyCarpi2 = (y2 - y1) * 2;
  int x, y = y1;
 
  for (x = x1; x < x2; x++)
  {
    pikselBas(x, y);
    hata += dyCarpi2;
 
    if (hata > 0)
    {
      y++;
      hata -= dxCarpi2;
    }
  }
}
////////////////////////////////////
////////////////////////////////////
void alanDoldur(int x, int y, int eskiRenk, int yeniRenk)
{
  if (pikselAl(x, y) == eskiRenk)
  {
    pikselBas(x, y, yeniRenk);

    /* (x, y) koordinatına komşu 4 piksel için prosedürü
       özyineli olarak çağır. */
    alanDoldur(x+1, y, eskiRenk, yeniRenk);
    alanDoldur(x-1, y, eskiRenk, yeniRenk);
    alanDoldur(x, y+1, eskiRenk, yeniRenk);
    alanDoldur(x, y-1, eskiRenk, yeniRenk);
  }
}
////////////////////////////////////
///BSpline Eğrisi////////////////////////////
////////////////////////////////////
typedef struct
{
  float x, y, z;
} Nokta3B;

int dugumK, dugumN;

int dugumVektoru(int i)
{
  if (i < dugumK)
     return 0;
  else if (i > dugumN)
     return (dugumN - dugumK + 2);
  return (i - dugumK + 1);
}

float basisFonksiyonu(int i, int k, float u)
{
  int t;
  float v;

  if (k == 1)
  {
    v = 0.0f;
    if ((dugumVektoru(i) <= u) && (u < dugumVektoru(i + 1)))
      v = 1.0f;
  }
  else
  {
    v = 0.0f;
    t = dugumVektoru(i + k - 1) - dugumVektoru(i);
    if (t != 0)
      v = (u - dugumVektoru(i)) *
          basisFonksiyonu(i, k - 1, u) / t;
    t = dugumVektoru(i + k) - dugumVektoru(i + 1);
    if (t != 0)
      v = v + (dugumVektoru(i + k) - u) *
          basisFonksiyonu(i + 1, k - 1, u) / t;
  }
  return v;
}


Nokta3B BSpline(float u, int n, int k, Nokta3B kontrolNoktalari[])
{
  int i;
  float b;
  Nokta3B p;

  dugumK = k;
  dugumN = n;

  p.x = 0.0f;
  p.y = 0.0f;
  p.z = 0.0f;

  for (i = 0; i <= n; i++)
  {
    b = basisFonksiyonu(i, k, u);

    p.x += kontrolNoktalari[i].x * b;
    p.y += kontrolNoktalari[i].y * b;
    p.z += kontrolNoktalari[i].z * b;
  }

  return p;
}
////////////////////////////////////
/// Cember ///////////////////
////////////////////////////////////
/* Trigonometri */
int derece;
for (derece = 0; derece < 360; derece++)
{
  double radyan = derece * 3.141592653589793238462643 / 180.0;
  double x = cos(radyan);
  double y = sin(radyan);

  /* (x, y) koordinatlarını kullan. */
}


/* Trigonometrik Toplam Eşitlikleri */
double delta = 1.0 * (3.141592653589793238462643 / 180.0);

double sinDelta = sin(delta);
double cosDelta = cos(delta);

double x = 1.0, y = 0.0;

int derece;
for (derece = 0; derece < 360; derece++)
{
  /* (x, y) koordinatlarını kullan. */

  double xYeni = x * cosDelta - y * sinDelta;
         y     = x * sinDelta + y * cosDelta;
         x     = xYeni;
}


/* Bezier Egrileri (Horner kuraliyla) */
double t;
for (t = 0.0; t <= 1.0; t += 0.01)
{
  double x = (0.023193 * t - 0.316086) * t * t + 1.0;
  double y = ((-0.055993 * t - 0.032527) * t + 0.795627) * t;

  /* (x, y) koordinatlarını kullan. */
}


/* Bezier Egrileri (Artimsal yontemle) */
double x    =  1.0;
double dx   = -0.0000315854;
double ddx  = -0.0000630780;
double dddx =  0.000000139158;

double y    =  0.0;
double dy   =  0.00795296;
double ddy  = -0.00000684136;
double dddy = -0.000000335958;

int i;
for (i = 0; i < 100; i++)
{
  /* (x, y) koordinatlarını kullan. */

  x += dx;  dx += ddx;  ddx += dddx;
  y += dy;  dy += ddy;  ddy += dddy;
}


/* Ozyineli bolumlendirme */
void ozyineliYay(double x1, double y1, double x2, double y2)
{
  double d = sqrt(2.0 + 2.0 * (x1 * x2 + y1 * y2));

  double xn = (x1 + x2) / d;
  double yn = (y1 + y2) / d;
      
  if (hata belirli bir değerin altında ise)
  {
    /* (x1, y1), (x2, y2) ve (xn,yn) koordinatlarını kullan. */
  }
  else
  {
    ozyineliYay(x1, y1, xn, yn);
    ozyineliYay(xn, yn, x2, y2);
  }
}


/* Bresenham Cember */
void pikselBas8(int x, int y, int xmerkez, int ymerkez)
{
  pikselBas(xmerkez + x, ymerkez + y);
  pikselBas(xmerkez - x, ymerkez + y);
  pikselBas(xmerkez + x, ymerkez - y);
  pikselBas(xmerkez - x, ymerkez - y);
  pikselBas(xmerkez + y, ymerkez + x);
  pikselBas(xmerkez - y, ymerkez + x);
  pikselBas(xmerkez + y, ymerkez - x);
  pikselBas(xmerkez - y, ymerkez - x);
}

void bresenhamCember(int xmerkez, int ymerkez, int r)
{
  int x = r, y = 0, hata = 0;
  int hata1, hata2;

  pikselBas8(x, y, xmerkez, ymerkez);

  while (x >= y)
  {
    hata1 = hata + (2 * y + 1);
    hata2 = hata + (2 * y + 1) - (2 * x - 1);

    if (abs(hata1) < abs(hata2))
    {
      y++;
      hata = hata1;
    }
    else
    {
      x--;
      y++;
      hata = hata2;
    }

    pikselBas8(x, y, xmerkez, ymerkez);
  }
}


/* Daire (Yavas) */
void daire(int xmerkez, int ymerkez, int r)
{
  int x, y;

  for (y = -r; y <= r; y++)
    for (x = -r; x <= r; x++)
      if (x * x + y * y < r * r)
        pikselBas(x + xmerkez, y + ymerkez);
}


/* Daire (Hizli) */
void daire(int xmerkez, int ymerkez, int r)
{
  int x, y;

  for (x = -r; x <= r; x++)
  {
    int yBitim = sqrt(r * r - x * x);
   
    for (y = -yBitim; y <= yBitim; y++)
      pikselBas(x + xmerkez, y + ymerkez);
  }
}


/* pisagor */
void pisagorCember(int xmerkez, int ymerkez, int r)
{
  int x;

  for (x = -r; x <= r; x++)
  {
    int y = sqrt(r * r - x * x);
    pikselBas(x + xmerkez,  y + ymerkez);
    pikselBas(x + xmerkez, -y + ymerkez);
  }
}
////////////////////////////////////
//Beizer//////////////////////////////////
////////////////////////////////////
typedef struct
{
  float x, y, z;
} Nokta3B;

int C(int n, int i)
{
  int a = 1, j;

  for (j = i + 1; j <= n; j++)
    a *= j;
  for (j = 1; j <= n - i; j++)
    a /= j;

  return a;
}

float basisFonksiyonu(int i, int n, float u)
{
  int j;
  float v;

  v = C(n, i);

  for (j = 1; j <= i; j++)
    v *= u;
  for (j = 1; j <= n - i; j++)
    v *= (1 - u);

  return v;
}

Nokta3B bezierEgrisi(float u, int n,
                     Nokta3B kontrolNoktalari[])
{
  int i;
  float b;
  Nokta3B p;

  p.x = 0.0f;
  p.y = 0.0f;
  p.z = 0.0f;

  for (i = 0; i <= n; i++)
  {
    b = basisFonksiyonu(i, n, u);

    p.x += kontrolNoktalari[i].x * b;
    p.y += kontrolNoktalari[i].y * b;
    p.z += kontrolNoktalari[i].z * b;
  }

  return p;
}
bilgisayar grafikleri kitabından...
Başa dön
Kullanıcı profilini gör E-Posta'yı gönder MSN Messenger
aseka



Kayıt: Jun 04, 2005
Mesajlar: 7

MesajTarih: Sun Oct 23, 2005 11:29 am    Mesaj konusu: Alıntıyla Cevap Ver

Tesekkurler arkadaslar. stroma ozellikle senin verdigin cok isime yaradi, saol dostum.
Başa dön
Kullanıcı profilini gör
Mesajları göster:   
Yeni Başlık Gönder   Cevap Gönder    www.oyunyapimi.org Forum Ana Sayfası -> Grafik, Modelleme ve Tasarım Tüm saatler GMT +2 Saat
1. sayfa (Toplam 1 sayfa)

 
Forum Seçin:  
Bu forumda yeni konular açamazsınız
Bu forumdaki mesajlara cevap veremezsiniz
Bu forumdaki mesajlarınızı değiştiremezsiniz
Bu forumdaki mesajlarınızı silemezsiniz
Bu forumdaki anketlerde oy kullanamazsınız


Powered by phpBB 2.x.x © 200x phpBB Group
Türkçe Çeviri : Onur Turgay & Erdem Çorapçıoğlu
Türkçe Düzenleme: Alexis Canver
Version 2.x.x of PHP-Nuke Port by Tom Nitzschner © 200x www.toms-home.com




Web site powered by PHP-Nuke
Web site engine\'s code is Copyright © 2002 by PHP-Nuke. All Rights Reserved. PHP-Nuke is Free Software released under the GNU/GPL license.
Sayfa Üretimi: 0.133 Saniye