Bu sayfadaki yazılar
Sayfanın metni
Sayfa 113
y = 100 + 100 * Math.sin(i / 128 * Math.PI);
nokta(x,y);
ekraniOlustur();
ekraniCiz();
</script>
Bu script taginin yer aldığı alan. Burada iki yeni fonksiyon tanımlıyoruz. Bunlardan birincisi verilen (x,y) koordinatına nokta basan bir rutin. Elbette ki bu rutin VICHaritasi dizisini kullanıyor. Yani aslında bu fonksiyonu çağırarak ekrana henüz bir şey çizmiyoruz. Bunun yerine noktayı VICHaritasi dizisindeki ilgili byte'ları değiştirerek koyuyoruz.
Diğer fonksiyonumuz ise ekraniOlustur() fonksiyonu. Bu fonksiyon ise ekrana çizilecek şeyin belirlendiği kısım. Bu örnekte ekrana tam sınırlarına denk gelecek bir elips çizdiriyoruz. Öncelikle sinüs, cosinüs fonksiyonları yardımıyla elipsin çevresini oluşturan (x,y) değerleri elde ediliyor, daha sonra az öncesinde yaratılmış nokta(x,y) fonksiyonu çağırılarak noktalar VICHaritasi dizisindeki yerlerini alıyorlar.
Son olarak ekraniOlustur() fonksiyonu çağırıldıktan sonra önceki JS dosyasında bulunan ekraniCiz() çağırılarak sonucu HTML içerisinde görüntülüyoruz.
İşin özeti bu. Burada sinüs, cosinüs kullanılarak çember ya da elips nasıl çizdirilir bunu açıklamayı yersiz buluyorum. Formül olarak zaten açık bir şekilde duruyor. 160 ve 100 nereden geldi diyecek olursanız 320 ve 200'ün yarısı yani ekranın orta koordinatları. 256 adım sayısı ve 128 ise bu adım sayısının yarısı. Aslında 128 yerine 256'yı olduğu şekilde kullanmak gerekir ancak derece -> radyan dönüşümünde kullanılan bir kısaltma ile (i / 256 * 2 * pi) yerine (i / 128 * pi) şeklinde kısalttığımız için 128 değerini kullandık.
Gelelim en can alıcı noktaya. nokta(x,y) fonksiyonu. Buradaki adres ve byteDegeri'ni nasıl hesaplıyoruz? Gelin birlikte buna kafa yoralım.
Elimizde bir x ve bir y değeri var. Bizim ulaşmak istediğimiz 8000'lik dizinin kaçıncı elemanına denk geldiği ve bu elemanın değerini nasıl etkilediğini (hangi bitini set ettiğini) bulmak. Öncelikle şunu biliyoruz. Ekranın en sol üstünden yani dizinin ilk elemanından itibaren byte'lar birer birer arttıkça y'de 8'lik alanda birer birer artıp her 8'den sonra yeniden 0'a dönüyor. Bunu yine bardak, raf örneğini inceleyerek anlayabilirsiniz. İlk byte'da y koordinatı 0, ikincide 1, üçüncüde 2....sekizincide 7 ve dokuzuncuda yine 0... Peki bu nereye kadar böyle devam ediyor? 40. karaktere kadar yani 40x8=320. byte'a kadar. 320. byte'da y koordinatı 8 atlayarak 8 ile 15 arası değerler almaya başlıyor. 640'da 16-23, 960'da 24-31 şeklinde devam ediyor bu. Peki bunu nasıl formülize edeceğiz? Madem "her 8'de bir" diyoruz öncelikle bu 8'deki kırılma noktasını ilkokuldan kalma yöntemle bölme işlemi yaparak inceleyelim.
Buradaki s sonuç ve k kalan'ı temsil ediyor. Peki bu iki parametreyi nasıl formülize edeceğiz?
Klavyeyle gezinmek için ← ve → tuşları.
Sayfa 112
Daha sonra ekrana bir elips çizilir.
Bu örnekte ne yaptık? Standart HTML yapısını çıkaracak olursak iki bölge bizi ilgilendiriyor. Birincisi
<script src="vicsim.js"></script>
satırı. Bu satırda az önce oluşturduğumuz "vicsim.js" dosyasını HTML'e ekliyoruz. Diğer önemli bölge ise
<script> function nokta(x,y)
adres = ((y >> 3) * 320) + (y & 7) + (x & 0x1f8);
byteDegeri = Math.pow(2, 7 - (x & 7));
VICHaritasi[adres] = VICHaritasi[adres] | byteDegeri;
function ekraniOlustur()
for(i = 0; i < 256; i++)
x = 160 + 160 * Math.cos(i / 128 * Math.PI);