...::::Tek Link Full Download::::...



İnternet Sayfamıza Hoşgeldiniz...

Sitemize üye olarak bir çok linki elde edebilirsin!!!

Anasayfa bölümünde bir çok konu bulunmaktadır....




...::::Tek Link Full Download::::...

İStediğiniz Türden Dosya....
 
AnasayfaSite AnalizTakvimSSSAramaÜye ListesiKullanıcı GruplarıKayıt OlGiriş yap
Sitemize Moderatör Aranmaktadır...
Başvuru yapacaklar admine ulaşabilirler...


Paylaş | 
 

 Güzel Bir Animasyon(Kodlar)

Önceki başlık Sonraki başlık Aşağa gitmek 
YazarMesaj
Admin
Admin
avatar

Mesaj Sayısı : 63
Tecrübe Puanı : 173
Kayıt tarihi : 12/07/10

MesajKonu: Güzel Bir Animasyon(Kodlar)   Salı Tem. 13, 2010 2:47 pm

Güzel Bir Animasyon




Krank Biyel mekanizması dönme hareketini doğrusal harekete çeviren veya doğrusal hareketten dönme hareketi elde eden bir sistemdir. Mesela otomobil motorlarındaki pistonlar gibi.

Formül
________________________________________




s = r( 1 - cos (A) ) - ( r / (L * 2) ) * r * sin (A)^2

denklemde ikinci - işareti yerine + işareti konulursa dönme yönü değişir. Şimdi bu formülü kullanarak değişken krank ve biyel değerlerinde bir animasyon programı yapalım.

Program Nesneleri ve Ayarları
________________________________________


Nesneler ve Ayarları :

(PictureBox)
Name = ekran
Backcolor = mavi ayarlayın.
AutoRedraw = True
Width= 10095
Height = 6975

(TextBox) Krank Yarıçapı Değeri İçin.

(TextBox) Biyel Mesafesi İçin.

(Timer)
Enabled = False
Interval = 100

(HScroll)
Max = 3
Min = 1
Value = 2

(CommandButton)
Caption = Başla

(CommandButton)
Caption = Durdur
Enabled = False

PictureBox�ın sağ üst köşesine gelecek şekilde, picturebox�un içine bir adet (Label)
Name = Label4
ForeColor = AçıkSarı
Caption = �Açı = 0�

(Line)
Name = Line1
X1 = 0
X2 = 10080
Y1 = 3480
Y2 = 3480
BorderColor = Açıkmavi
BorderStyle = 4

(Line)
Name = Line2
X1 = 3000
X2 = 3000
Y1 = 0
Y2 = 6840
BorderColor = AçıkMavi
BorderStyle = 4

(Line)
Name = Krank
BorderColor = Turuncu
BorderWidth = 10
Visible = False
Konumu Önemli Değil
(Line)
Name = Biyel
BorderColor = Yeşil
BorderWidth = 10
Visible = False
Konumu Önemli Değil

Line nesnelerini picturebox içine koyun. Tüm nesneler ve Ayarları Bu Kadar... Program görünümü aşağıdaki gibi olabilir.



Ekran Geometrisi :
________________________________________


Kullanıcı text1 ve text2 kutucuklarına sırasıyla krank yarıçapı ve biyel uzunluğu değerlerini girerler. Başla butonuna basıldığında önce krankın hareketini tanımlayan çember çizdirilir. Asal eksenin koordinatları için yatay ve düşey sabitleri tuttum. Bu şekilde sanal ( 0 , 0 ) noktasını elde ettim.
Const yatay = 300
Const dusey = 348


Bu değerleri deneme-yanılma metoduyla buldum. Çemberi bu noktaya çizdiririz. Çember rengi beyaz
Ekran.Circle ( yatay , dusey ) , Text1.Text , RGB ( 255, 255 , 255 )


Krank ve Biyel ilk olarak 0 derecedeki konumlarında yerleştirilirler.. Krank kolu 0 derecede aşağıdaki konumda olur.
krank.X1 = yatay
krank.Y1 = dusey
krank.X2 = yatay + Text1.Text
krank.Y2 = dusey


Aynı şekilde biyel kolu da aşağıdaki konumdadır.
biyel.X1 = krank.X2
biyel.Y1 = krank.Y2
biyel.X2 = biyel.X1 + Text2.Text
biyel.Y2 = krank.Y2


Sürekli Açı Değeri Elde Etmek :
________________________________________


Timer nesnesi ile kolayca açı değerleri türetebiliriz. Timer nesnesi sürekli olarak tekrarlı işlemler yapacaktır. Bir sayac değişkeni koyarsak bu değişkenin değeri sürekli artarak gidecektir. Burada MOD operatörünü kullanarak değişkenin belli bir değerde sıfırlanmasını sağlayabiliriz. MOD operatörü matematikteki MOD işine yarar.
açı = açı + 10


ifadesi ile sürekli 10 ar 10 ar değer arttırırız. Her seferinde bu değişkenin mod 360 daki değerini elde etmek için aşağıdaki işlemi yaparız.
açı = açı mod 360


İkisini birleştirelim:
açı = ( açı + 10 ) Mod 360


Şimdi krankın çember etrafında dönüşünü yaptıralım. Analitik geometriden hatırlanacağı üzere çember üzerindeki herhangi bir noktanın koordinatı

X = R * cos ( A )
Y = R * sin ( A ) ile hesaplanıyordu. Bu iki formül yardımıyla krankın çember üzerindeki noktasını elde edebiliriz. Bilindiği gibi tüm programlama dillerinde açılar Radyan cinsindendir. Bunu Derece cinsine çevirmek için pi / 180 ile çarpmak lazımdır. Bunun için drc adında bir sabit tanımladım.
Const drc = 3.14159265 / 180

krankx = yatay + ( r * Cos ( aci * drc ))
kranky = dusey - ( r * Sin ( aci * drc ))


Bu iki değer o an çember üzerindeki hareketli noktanın koordinatlarını verir. Şimdi hareketin özüne gelelim. Krank kolunun bir ucu çember merkezinde sabit diğer ucu da bu hareketli noktadadır. Biyel kolunun bir ucu bu hareketli noktada ve diğer ucu hareketlidir. Bu hareketlilik aslında düşeyde değişmez. Sadece yatayda değişir. Değişim miktarı ne kadardır? S kadar.

Şimdi bu bilgileri yerleştirelim..
krank.X1 = krankx
krank.Y1 = kranky
krank.X2 = yatay
krank.Y2 = dusey

biyel.X1 = krankx
biyel.Y1 = kranky
biyel.X2 = s
biyel.Y2 = dusey


İşte bu kadar. Tüm geometrik ifadeleri nesneler üzerine yerleştirdik. Aşağıda tüm programı bulabilirsiniz.

Const yatay = 300 ' Asal Eksen yatay noktası
Const dusey = 348 ' Asal Eksen dusey noktası
Const drc = 3.141592 / 180 ' Radyan-Derece Dönüşüm Katsayısı
Dim aci As Integer

Private Sub Form_Load()
ekran.Scale (0, 0)-(1004, 692)
aci = 0
End Sub

Private Sub Command1_Click()
ekran.Cls
aci = 0

' Boyut Kontrolleri
If Text1.Text < 40 Or Text1.Text > 200 Then
MsgBox "Krank Yarıçapı değerini 40 ile 200 arasında Girin", vbInformation, "Boyut Hatası"
Exit Sub
End If

If Text2.Text < (Text1.Text * 2.2) Or Text2.Text > 500 Then
MsgBox "Biyel kolu krank yarıçapının 2.2 katından az ve 500'den büyük olamaz.", vbInformation, "Boyut Hatası"
Text2.Text = Fix(Text1.Text * 2.2) + 1
Exit Sub
End If

' ekrana krank çemberi çiziliyor...
ekran.Circle (yatay, dusey), Text1.Text, RGB(255, 255, 255)

' krank ayarı yapılıyor...
krank.X1 = yatay
krank.Y1 = dusey
krank.X2 = yatay + Text1.Text
krank.Y2 = dusey
krank.Visible = True

' Biyel ayarı yapılıyor...
biyel.X1 = krank.X2
biyel.Y1 = krank.Y2
biyel.X2 = biyel.X1 + Text2.Text
biyel.Y2 = krank.Y2
biyel.Visible = True

' Bilgi Girişi Kapatılıyor..
Text1.Enabled = False
Text2.Enabled = False
Command2.Enabled = True
Command1.Enabled = False

Timer1.Enabled = True

End Sub

Private Sub Command2_Click()
' İşlem Durduruluyor...
Timer1.Enabled = False

Text1.Enabled = True
Text2.Enabled = True
Command1.Enabled = True
Command2.Enabled = False

End Sub

Private Sub HScroll1_Change()
' Yatay kaydırma çubuğu ile timer nesnesinin interval özelliği kontrol ediliyor...
Label3.Caption = "Hız (" & HScroll1.Value & "/3) :"
Timer1.Interval = (4 - HScroll1.Value) * 50
End Sub

Private Sub Timer1_Timer()
' Açı değeri 10 luk birimlerde artacak...
aci = (aci + 10) Mod 360
Label4.Caption = "Açı : " & aci

' Formül karışmasın diye iki değişken daha tanımladım...
r = Text1.Text
L = Text2.Text

s = (yatay + Text1.Text + Text2.Text) - (r * (1 - Cos(aci * drc)) + (r ^ 2 / (L * 2)) * Sin(aci * drc) ^ 2)

' Krank Kolunun Çember Üzerindeki Temas Noktası Hesaplanıyor..
krankx = yatay + (r * Cos(aci * drc))
kranky = dusey - (r * Sin(aci * drc))

' Krank Kolu Çiziliyor...
krank.X1 = krankx
krank.Y1 = kranky
krank.X2 = yatay
krank.Y2 = dusey

' Biyel Kolu Çiziliyor...
biyel.X1 = krankx
biyel.Y1 = kranky
biyel.X2 = s
biyel.Y2 = dusey

End Sub

Sayfa başına dön Aşağa gitmek
Kullanıcı profilini gör http://forumtime.fullforums.org
 
Güzel Bir Animasyon(Kodlar)
Önceki başlık Sonraki başlık Sayfa başına dön 
1 sayfadaki 1 sayfası

Bu forumun müsaadesi var:Bu forumdaki mesajlara cevap veremezsiniz
...::::Tek Link Full Download::::... :: PROGRAMLAMA/WEB TASARIM :: Visual Basic-
Buraya geçin: