Bilgisayar grafikleri

Faruk CAN

04.01.15

Lütfen web sitemi ziyaret etmeyi unutmayın.

Konular arasında ilerlemek için sağa,

Bir konu hakkında ayrıntı için aşağı,

doğru ilerlemeniz gerekir

Belge Sürümü : 1.00

Son Güncelleme: 01/15

 

Bilgisayar Grafiklerin Gelişimi

Vektörler

  • Bir büyüklüğü ve yönü ifade eden matrislerdir
  • 2,3 ve 4 boyutlu olabilir
  • Vektörler konum belirtmez.
  • Fakat konum vektör ile belirtilebilir.
  • Bilgisayarda matrislerle (2B Array) ifade edilir
//
//        vec2d CLASS by farukcan
//            vektör sınıfı ve fonksiyonlarıdır
function vec2d(x,y){
  this.x = x;
  this.y = y;

  this.add = function(v){ // a.add(v) => a-> = ->a + ->b
    this.x+=v.x;
    this.y+=v.y;
    return this;
  }
  this.sub = function(v){
    this.x-=v.x;
    this.y-=v.y;
    return this;
  }
  this.norm = function(){
    return Math.sqrt(this.x*this.x+this.y*this.y);
  }
  this.skaler = function (k) { // ->a = k.->a
    this.x*=k;
    this.y*=k;
    return this;
  }
}
function v2(x,y){ // vec2d'nın hızlı oluşturucusu
  return new vec2d(x,y);
}

function dot2vec(a,b){ // ->A & ->B => AB-> = dot2vec(A,B)
  var e = b;
  return vec_sub(b,a);
}

function vec_sub(a,b){
  return new vec2d(a.x-b.x,a.y-b.y);
}

function vec_add(a,b){
  return new vec2d(a.x+b.x,a.y+b.y);
}

function vec_skaler (k,v) {
  return new vec2d(k*v.x,k*v.y);
}

function vec_paralel(a,b){ // birbirlerin katıysa bunlar paraleldir
  if((a.x/b.x)==(a.y/b.y))
    return true;
  return false;
}

function vec_carp_skaler(a,b){ // skaler : iç çarpım A-> * B-> = |A| * |B| * cosX
  return a.x*b.x+a.y*b.y;
}

function vec_cos(a,b){
  return vec_carp_skaler(a,b)/a.norm()/b.norm();
}

function vec_birim(v){
  var n = v.norm();
  return v2(v.x/n,v.y/n);
}

function vec_izdusum(a,b){ // A vektörünün B üzerine iz düşümüdür B'nın birim vek @@ projeksiyonu diyede adlandırılabilir
// b'nin birim vektörünün ab skaler capımı ile çarpımıdır.
return vec_birim(b).skaler(vec_izdusum_norm(a,b));
}

function vec_izdusum_norm(a,b){ // A vektörünün B üzerine iz düşümüdür (A->*B->) / |B|
  return vec_carp_skaler(a,b)/b.norm();
}
//
// ------
//

Vektörün ifadesi

AB = A => B
A = 0A

2 boyutlu
| x |
| y |

3 boyutlu
| x |
| y |
| z |

Vektörün Normu (Uzunluğu)

Vektörün sonun başlangıç noktası uzaklığıdır ||x|| şeklinde ifade edilir

 

  this.norm = function(){
    return Math.sqrt(this.x*this.x+this.y*this.y);
  }

Vektörlerin paralelliği

Aynı yöne veya birbirine zıt yöne bakan vektörler paraleldir. Ve bunların şiddetinin birimleri orasında oran vardır

function vec_paralel(a,b){ // birbirlerin katıysa bunlar paraleldir
  if((a.x/b.x)==(a.y/b.y))
    return true;
  return false;
}

Birim vektör

Normu daima 1 olan vektörlerdir.

Sadece yön ifade etmek için kullanılır

(3,4) => (0.6,0.8)
(3,4)=>(0.6,0.8)
function vec_birim(v){
  var n = v.norm();
  return v2(v.x/n,v.y/n);
}

Vektörde

toplama çıkarma

(a,b) + (m,n) = ( a+m , b+n)
(a,b)+(m,n)=(a+m,b+n)
(3,4) + (11,12) = ( 14 , 16)
(3,4)+(11,12)=(14,16)
function vec_sub(a,b){
  return new vec2d(a.x-b.x,a.y-b.y);
}

function vec_add(a,b){
  return new vec2d(a.x+b.x,a.y+b.y);
}

Vektörün bir sayıyla skaler çarpımı

vektörün şiddetini/uzunluğunu o sayı ile orantılı arttırır.

 

k*(x,y) = (kx,ky)
k(x,y)=(kx,ky)
function vec_skaler (k,v) {
  return new vec2d(k*v.x,k*v.y);
}
2*(5,3) = (10,6)
2(5,3)=(10,6)

2 Vektörün Skaler Çarpımı (dot product)

  • Uzunluklukların aralarındaki açının cos u ile çarpımı ile bulunur.(veya)
  • Matrislerin A^T * B si ile ile bulunur. Yani (İlkinin transponuyla ikincisinin çarpımı)(veya)
  • Değerler(x,y,z,h)'lerin çarpılıp toplanması ile bulunur

 

function vec_carp_skaler(a,b){
  return a.x*b.x+a.y*b.y;
}

İz düşüm vektörü

function vec_izdusum(a,b){ 
// A vektörünün B üzerine iz düşümüdür B'nın birim vek @@ projeksiyonu diyede adlandırılabilir
// b'nin birim vektörünün ab skaler capımı ile çarpımıdır.
return vec_birim(b).skaler(vec_izdusum_norm(a,b));
}

function vec_izdusum_norm(a,b){ 
// A vektörünün B üzerine iz düşümüdür (A->*B->) / |B|
  return vec_carp_skaler(a,b)/b.norm();
}

Matrisler

Satır ve sutunlarından oluşan 2 boyutlu değer dizisidir

Matriste çarpma

Vektör Matrisleri ile

  • 1 Vektörle => Nokta
  • 2 Vektörle => Dogru
  • 3 Vektörle => Yüzey
  • n Vektörle => Cisim

oluşturulabilir/ifade edilebilir

Vektör dizileri

 

(3,5) => 2B Nokta

(3,3,5) => 3B nokta

 

2B Doğru

3,5

6,8

 

2B Yüzey

3,5

6,8

7,5

Homojenlik

ötemelemeye imkan tanımak için eklenen ek satır/değerdir. Bir konumu farklı şekilde ifade etmeye imkan tanır. Standart değeri 1'dir. Kullanılırkende 1 olmalıdır

 

 

2B

homojen değil

X

y

homojen

x

y

1

3B

homojen değil

X

y

z

homojen

x

y

z

1

Dönüşüm / Transformasyon

  • Translation -Öteleme/Taşıma
  • Scale - Boyutlandırma & Yansıtma
  • Rotation - Döndürme
  • Shear - Yamultma

Dönüşüm bir vektör matrisinin, o dönüşüme karşılık gelen matris ile çarpımı ile olur

2B Transformasyonlar

Öteleme

Bir noktayı hareket ettirmektir. (homojen noktalarda geçirlidir)

 

Scale - Boyutlandırma

Rotate - Döndürme

cT = cos(T)

sT = sin(T)

Shearing - Yamultma

?

3B Dönüşümler

3B Döndürme

2B deki gibi yer değişme özelliğini sahip değildir.

R1 * R2 != R2 * R1

yani ilk x sonra yye döndürmekle ilk yye sonra xe döndürmek aynı şeyler değil

3B Öteleme

Öteleme+Döndürme != Döndürme+Ötelme

Çünkü öteleme Toplama işlemine karşılık gelir.

P' = (TR)P =  RP + T

Ötemele Transformansyon matrisi

1    0    0    TX
0    1    0    TY
0    0    1    TZ
0    0    0    0

Made with Slides.com